【iOS开发】面试题整理(技术)

12.26

一、KVO及其实现原理

KVO提供一种机制,指定一个被观察对象(例如A类),当对象某个属性(例如A中的字符串name)发生更改时,对象会获得通知,并作出相应处理
KVO原理:当观察某对象A时,KVO机制动态创建一个对象A当前类的子类,并为这个新的子类重写了被观察属性keyPath的setter 方法。setter 方法随后负责通知观察对象属性的改变状况。
代码类似下面这样:

-(void)setName:(NSString *)newName{
 [self willChangeValueForKey:@"name"]; //KVO在调用存取方法之前总调用
 [super setValue:newName forKey:@"name"]; //调用父类的存取方法 
[self didChangeValueForKey:@"name"]; //KVO在调用存取方法之后总调用}

参考文章:iOS--kVO内部实现原理与使用
iOS--KVO内部实现原理

二、数组与链表的优缺点

数组优点 链表优点 数组缺点 链表缺点
内存 1.存储在堆区 1. 存储在栈区2.一旦数组定义,则大小固定,无法修改数组的大小
操作 下标访问,速度快,时间复杂度为O(1)。 1.数组插入和删除的效率低,时间复杂度为O(n) 链表的遍历过程效率低

参考文章:
数组与链表的优缺点

三、iOS中的线程安全

参考文章:iOS多线程到底不安全在哪里?
iOS开发多线程篇—线程安全

四、selector是什么?

参考文章:IOS深入学习(17)之选择器(Selector)

1、@selector 是一个编译标示,返回一个SEL类型的对象,类似于方法宏
2、它扮演着类似于一个动态函数指针,对于一个已经给与的名字,自动指向类所使用的适用的方法的实现
3、SEL 查找的方法不支持类方法

五、catalog、extension、protocol是什么?

类目、扩展/延展、协议
参考文章:Objective-C中的类目,延展,协议
1、扩展相当于匿名的类目

六、什么时候用NSNotification,什么时候用delegate?

参考文章:细说KVO & KVC & NSNotificationCenter那些事

你可能感兴趣的:(【iOS开发】面试题整理(技术))