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、扩展相当于匿名的类目
网友评论