KVO

作者: 伶俐ll | 来源:发表于2018-07-12 13:23 被阅读7次

    一、KVO的本质(ios用什么方法实现对一个对象的KVO)

    • 利用runtimeAPI动态生成一个子类,并且让instance的isa指针指向这个全新的子类
    • 当修改instance对象的属性时,会调用Foundation的NSSetXXXValueAndNotify函数(int、double、、、)。
    • 在NSSetXXXValueAndNotify函数内部会调用
      1、willChangeValueForKey:
      2、父类原来的setter函数
      3、didChangeValueForKey:函数,在函数内部会触发监听器的监听方法(observeValueForKeyPath:ofObject:change:context:)

    二、如何手动触发KVO

    • 手动调用willChangeValueForKey:和didChangeValueForKey:方法。
    • 注:在didChangeValueForKey:方法内部会判断是否调用了willChangeValueForKey:方法,如果调用了则会触发监听器的监听方法,否则不会触发,所以willChangeValueForKey:必须调用。

    三、直接修改成员变量会出发KVO吗

    • 不会触发KVO,但是可以手动调用willChangeValueForKey:和didChangeValueForKey:方法触发KVO
    • 通过KVC直接给成员变量赋值会触发KVO

    相关文章

      网友评论

          本文标题:KVO

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