您的位置:首页 > 职场人生

iOS面试

2016-06-09 01:45 225 查看
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)你可以添加私有方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 面试