iOS面试

1.Runloop是什么?

Runloop是事件接收和分发机制的一个实现。

1).从字面意思看就是运行循环,其实内部就是do-while循环,这个循环内部不断地处理各种任务(比 如Source,Timer,Observer)
2).一个线程对应一个RunLoop,主线程的RunLoop默认已经启动,子线程的RunLoop得手动启动(run方法)
3).RunLoop只能选择一个Mode启动,如果当前Mode中没有任何Source,Timer,Observer,那么就直接退出RunLoop

你在开发过程中怎么使用RunLoop?什么应用场景?
开启一个常驻线程(让一个子线程不进入消亡状态,等待其他线程发来的消息,处理其他事件)
在子线程中开启一个定时器
在子线程中进行一些长期监控
可以控制定时器在特定模式下运行
可以让某些事件(行为,任务)在特定模式下执行
可以添加observer监听RunLoop的状态,比如监听点击事件的处理(比如在所有点击事件前做一些处理)


2.iOS单例模式

+ (id)sharedInstance {
    static testClass *sharedInstance = nil;
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}

3.MVVM的作用和问题

MVVM 在实际使用中,确实能够使得 Model 层和 View 层解耦,但是如果你需要实现 MVVM 中的双向绑定的话,那么通常就需要引入更多复杂的框架来实现了。
缺点:
第一点:数据绑定使得 Bug 很难被调试。你看到界面异常了,有可能是你 View 的代码有 Bug,也可能是 Model 的代码有问题。数据绑定使得一个位置的 Bug 被快速传递到别的位置,要定位原始出问题的地方就变得不那么容易了。
第二点:对于过大的项目,数据绑定需要花费更多的内存。
某种意义上来说,我认为就是数据绑定使得 MVVM 变得复杂和难用了。但是,这个缺点同时也被很多人认为是优点。


4.多态

 多态就是父类指针指向子类对象,把对象的调用方法由编译时推迟到运行时,赋值后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作,把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

我们说的oc是动态运行时语言是什么意思?

  答案:多态。 主要是将数据类型的确定由编译时,推迟到了运行时

  这个问题其实浅涉及到两个概念,运行时和多态。

  简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。

  多态:不同对象以自己的方式响应相同的消息的能力叫做多态。意思就是假设生物类(life)都用有一个相同的方法-eat;

  那人类属于生物,猪也属于生物,都继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法。

  也就是不同的对象以自己的方式响应了相同的消息(响应了eat这个选择器)。

  因此也可以说,运行时机制是多态的基础


5.NSOperationQueue与GCD的使用原则和场景
首先,我们要明确NSOperationQueue与GCD之间的关系,NSOpertaionQueue用GCD构建封装的,是GCD的高级抽象。
其次,我们要区别两者的不同
1).GCD仅仅支持FIFO队列,而NSOperationQueue中的队列可以被重新设置优先级。
2).NSOperationQueue能够方便的设置依赖关系。
3).NSOperationQueue支持KVO,监听他是否完成或者取消。
4)GCD更接近底层,性能好,代码内聚。


6.类扩展作用
1)可以把暴露给外面的可读属性改为读写方便类内部修改。
2)可以添加任意私有实例变量。
3)可以任意添加私有属性。
4)你可以添加私有方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值