美文网首页
2019-05-18

2019-05-18

作者: Stephen_Huang | 来源:发表于2019-05-30 09:51 被阅读0次

    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
    
    
    

    相关文章

      网友评论

          本文标题:2019-05-18

          本文链接:https://www.haomeiwen.com/subject/wldnaqtx.html