美文网首页
OC基础-KVO(2)

OC基础-KVO(2)

作者: 我是卖报的小行家 | 来源:发表于2021-03-03 15:48 被阅读0次

kvo总结
问题:iOS用什么方式实现一个KVO?(KVO的本质是什么)
答:
利用RuntimeAPI动态生成一个子类,并且让instance对象的isa指向这个全新的子类
当修改instance对象的属性时,会调用Foundation的_NSSetXXXValueAndNotify函数
willChangeValueForKey:
父类原来的setter
didChangeValueForKey:
内部会触发监听器(Oberser)的监听方法( observeValueForKeyPath:ofObject:change:context:)

问题:如何手动触发KVO?
答:我们一般是调用set方法赋值,从而自动触发KVO。
手动调用其实是调用willChangeValueForKey和didChangeValueForKey方法

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//    [self.person1 setAge:21];
//    [self.person2 setAge:22];
    //手动调用KVO
    [self.person1 willChangeValueForKey:@"age"];
    [self.person1 didChangeValueForKey:@"age"];
    
}

我们把set方法注释调换成手动调用模式,发现也能触发KVO收到回调。willChangeValueForKey和didChangeValueForKey必须同时调用,缺一不可。

问题:直接修改成员变量会触发KVO么?
答:不会触发KVO,因为没有调用setter方法。因为KVO的本质是重写set方法,然后在set方法里依次调用willChangeValueForKey,原来的set方法,didChangeValueForKey,didChangeValueForKey内部会调用observer的observeValueForKeyPath: ofObject: change: context:方法

相关文章

  • OC基础-KVO(2)

    kvo总结问题:iOS用什么方式实现一个KVO?(KVO的本质是什么)答:利用RuntimeAPI动态生成一个子类...

  • swift中KVO和属性观察器

    开篇提醒:OC中的KVO及其KVO的基础知识可参见:深入runtime探究KVO Swift中,原本没有KVO模式...

  • OC知识点整理-(零)内容概要

    我们在OC中基础中,尝尝会被问到下面几个基础方面的问题。 OC基础 Category 关联对象 代理,通知 KVO...

  • iOS面试分享

    OC基础 1.kvo、kvc原理2.runtime、runloop 应用场景3.GCD NSOperation N...

  • 整理面试题

    一、OC语言基础知识剖析 (1)UI卡顿掉帧的原因 (1)什么是KVO? KVO实现原理?如何手动添加KVO? <...

  • OC 基础-KVO(1)

    KVO:全称:key-value-observing,俗称“键值监听”,可以用于监听某个对象属性值的变化内部实现(...

  • Runtime面试题

    1.oc消息转发流程 2.KVO原理KVO是基于runtime实现的,KVO运用了isa-swizzling将两个...

  • Objective-C KVO总结

    看本章之前建议先打好OC对象的基础:深入理解OC中的对象 大纲 什么是KVO 场景代码示例 (后面的分析都是基于示...

  • OC基础-(四)KVC、KVO

    KVO Q: 什么是KVO? KVO(key-value observing),从名称上就可以知道这是一种键值观察...

  • iOS KVO的底层实现原理

    KVO 是 OC 观察者设计模式的一种KVO 的实现依赖于 OC 强大的 RuntimeKVO是Cocoa提供的...

网友评论

      本文标题:OC基础-KVO(2)

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