iOS 遇到的几个面试题
经典面试题
您熟悉iOS中消息传递机制吗,这个问题在面试中经常会被问到,每个应用程序或多或少,都由一些松藕和的对象构成,这些对象彼此之间要想很好的完成任务,就需要进行消息传递。
神马是 KVO、NSNotification 、delegate、block 以及他们之间的区别你熟悉吗
KVO是cocoa框架实现观察者模式,一般同KVC搭配使用,通过KVO可以监测一个值的变化,比如View的高度变化。是一对多的关系,一个值的变化会通知所有的观察者。
NSNotification 是通知,它也是一对多的使用场景,就好比你通过广播通知发出消息,什么人接收,接没接收到你并不在意,你在意的是把消息发送出去。在某些情况下,KVO和NSNotification是一样的,都是状态变化之后告知对方。
NSNotification的特点就是需要被观察着先主动发出通知,然后观察者注册监听后再来进行响应,比KVO多了发送通知的一步,但是其优点是监听不局限于属性的变化,还可以对多种多样的状态变化进行监听,监听范围广,使用也更灵活。
delegate是代理,就是我不想做的事情交给别人做,就好比中介代理商,delegate是一对一的关系。
block 是delegate的另一种形式,是函数式编程的一种形式。使用场景跟delegate一样,相比delegate更灵活,而且代理的实现更直观。
KVO一般的使用场景是数据,需求是数据变化,比如股票价格变化,我们一般使用KVO(观察着模式)。delegate一般的使用场景是行为,需求是需要别人帮我做一件事情,比如买卖股票,我们一般使用delegate。
函数在主线程执行的4种方法
GCD方法,通过向主线程队列发送一个block块,是block里的方法可以在主线程中执行。
dispatch_async(dispatch_get_main_queue(),^{
//需要执行的方法
});
NSOperation 方法
NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; //主队列
NSBlockOperation *operation = [NSBlockPeration blockOperationWithBlock:^{
//需要执行的方法
}];
[mainQueue addOperation:operation];
NSThread 方法
[self performSelector:@selector(method) onThread:[NSThread mainThread] withObject:nil waitUntilDone:YES modes:nil];
[self performSelectorOnMainThread:@selector(method) withObject:nil waitUntilDone:YES];
[[NSThread mainThread] performSelector:@selector(method) withObject:nil];
RunLoop方法
[[NSRunLoop mainRunLoop] performSelector:@selector(method) withObject:nil];
iOS核心框架
CoreAnimation
CoreGraphics
CoreLocation
AVFoundation
Foundation
iOS核心机制
UITableView 重用
ObjC内存管理,自动释放池,ARC如何实现
runloop
runtime
Block的定义、特性、内存区域、如何实现
Responder Chain
NSOperation
GCD