美文网首页
iOS KVO,KVC

iOS KVO,KVC

作者: 孙掌门 | 来源:发表于2019-12-13 13:55 被阅读0次

iOS KVO,KVC

KVO

1.KVO 是一种观察者设计模式,是利用 isa 混写机制来实现 KVO 的。

当我们要观察类A中的某个属性变化的时候,系统会为我们创建一个 NSKVONotifying_A 的类,然后将原来的 isa 指针,指向这个类,重写 setter 方法,达到通知的效果

2.重写的 setter 方法,添加两个方法 willChangeValueForKeydidChangeValueForKey

通过kvc 的 setValue forKey 方法,也可以生效,因为调用这个方法会走到setter方法,而setter方法已经被系统重写,所以会生效.

3.通过成员变量的直接赋值,_age=1;是不会触发KVO的,但前后加上 willChangeValueForKeydidChangeValueForKey ,是可以触发的,手动 KVO 其实就是加上 这两个实现的,did 方法会触发回调。

总结:

1:使用 setter 方法改变值 kvo 会生效

2:使用 setvalue:forKey 改变值,kvo 会生效

3:成员变量直接修改会,需要手动添加两个方法才会触发

KVC

KVC:键值编码技术

valueForKey:

会先判断这个实力变量是否有相应的get方法,如果不存在,会判断,实例变量是否存在,会给一个方法开关 + (BOOL)accessInstanceVariablesDirectly,如果返回 NO ,即使同名的实例变量存在,也无法获得,如果YES,直接返回值,如果还不存在,会调用 - (id)valueForUndefinedKey:(NSString *)key ,抛出异常。

1.value 查找访问器(accessoriesMethod):

1.getKey

2.key

3.isKey

如果存在这三个方法会认为访问器存在

2.成员变量名字

1._key

2:_isKey

3:key

4:isKey

认为实例变量存在

setValueForKey:

会上面一样,会先判断是否有setter方法,有的话直接设置,没有的话,会判断是否有实例变量,如果还没有,调用- (void)setValue:(id)value forUndefinedKey:(NSString *)key跑出异常,如果有直接对这个成员变量赋值,结果流程

相关文章

  • KVC 和 KVO

    iOS-KVC和KVO精炼讲解(干货)KVC 和 KVOiOS开发系列--Objective-C之KVC、KVO细...

  • KVC

    iOS 如何使用KVC iOS开发UI篇—Kvc简单介绍 iOS开发系列--Objective-C之KVC、KVO

  • iOS - KVO

    [toc] 参考 KVO KVC 【 iOS--KVO的实现原理与具体应用 】 【 IOS-详解KVO底层实现 】...

  • iOS-KVO浅谈

    上一篇:iOS-KVC浅谈 前言:KVO 作为 KVC 的同袍兄弟,功能更强大,聊聊 KVO。 一、KVO 简介 ...

  • iOS日记15-KVC

    1.iOS开发技巧系列---详解KVC 2.漫谈 KVC 与 KVO 3.KVC/KVO原理详解及编程指南 关键点...

  • iOS面试题:KVC的赋值和取值过程是怎样的?KVO原理是什么?

    更多:iOS面试题大全 1、KVC赋值 2、 KVC取值 3、 KVO原理 KVO 是 Objective-C 对...

  • iOS原理(二)----KVO,KVC

    iOS原理(二)----KVO,KVC KVO KVO的全称是Key-Value Observing,俗称“键值监...

  • 从网上收集的一些关键知识点总结

    iOS 中KVC、KVO、NSNotification、delegate 总结及区别

  • 知识点3

    26. 什么是KVC和KVO? KVO: iOS开发-KVO的奥秘 http://www.jianshu.com/...

  • 无标题文章

    ios中的 kvc和kvo的区别 KVC编程时setValue(value: AnyObje...

网友评论

      本文标题:iOS KVO,KVC

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