1.KVO的实现原理:
使用KVO分为三个步骤:
1.通过addObserver:forKeyPath:options:context:方法注册观察者,观察者可以接收keyPath属性的变化事件。
2.在观察者中实现observeValueForKeyPath:ofObject:change:context:方法,当keyPath属性发生改变后,KVO会回调这个方法来通知观察者。
3.当观察者不需要监听时,可以调用removeObserver:forKeyPath:方法将KVO移除。需要注意的是,调用removeObserver需要在观察者消失之前,否则会导致Crash。
注:系统提供了手动和自动两种模式,默认自动模式
手动模式:重载实现automaticallyNotifiesOberversOfName函数,返回NO即可,结果是没有返回值
具体详见https://www.jianshu.com/p/91c41292b5b9
2.iOS可能导致崩溃的几个原因以及如何避免崩溃:
1.数组越界,插nil等
2.字典的构造与修改
NSDictionary 不支持 nil 作为 key.
NSDictionary 不支持 nil 作为 value.
3.NSString crash (字符串操作的crash)
4.unrecognized selector
5.UI not on Main Thread Crash (非主线程刷UI (机制待改善))
第三方库重复添加
3.block(https://www.jianshu.com/p/7a8ae975b172
)
Block类型
NSGlobalBlock:没有捕获外部变量 或者 只捕获全局变量,全局静态变量,局部静态变量。
另外:GlobalBlock的copy与retain还是GlobalBlock
NSStackBlock:使用了外部变量的block,将 Block 赋值给附有 __weak 修饰符变量。栈区
NSMallocBlock
网友评论