KVO总结

作者: zl520k | 来源:发表于2018-06-28 17:29 被阅读0次

KVO是键值对观察,是NSObject的非常正式协议。当创建一个类对象中的属性进行观察的时候,其实在运行的时候,自动创建一个NSKVONotifying_XX这个类,对外界是不可见的,这个类是是用runtime进行创建,导致很多操作,不是类本身,而是NSKVONotifying_XX。NSKVONotifying_XX是XX的子类,当你改变值的时候,就会发消息给NSKVONotifying_XX这个类,如果当前类没有这个变量,就会往父类进行查询,一直查找到根类NSObject。

如果一个类的对象没有被观察和被观察,isa的值是不一样的,这个要注意。一般情况下,自动观察。如果想手动观察的时候,+ (BOOL)automaticallyNotifiesObserversForKey:(NSString*)key,就可以在方法中进行设置。

- (void)addObserver:(NSObject*)observer forKeyPath:(NSString*)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void*)context

observer:是被观察的对象

keyPath:观察的属性

NSKeyValueObservingOptions:

NSKeyValueObservingOptionNew//修改字典中对应属性新值。

NSKeyValueObservingOptionOld//修改字典中对应属性旧值。

NSKeyValueObservingOptionInitial//注册方法的时候,直接调用,一般在选项中不能直接增加这个选项,都是新值。

NSKeyValueObservingOptionPrior//在发送通知之前和发送之后,都会调用一次

其中,这些可以组合使用。

context:上下文,这个是可以是任意可以转换值。

- (void)observeValueForKeyPath:(nullableNSString*)keyPath ofObject:(nullableid)object change:(nullableNSDictionary *)change context:(nullablevoid*)context

keyPath:属性的名

object:被观察的对象

change:改变的值

context:上下文,这个是可以是任意可以转换值

这个可以一对一或一对多进行观察。当设置属性的时候,如果属性方法实现了,可以在内面willChangeValueForKey:(NSString*)key和didChangeValueForKey:(NSString*)key的方法,当调用完成后,才调用- (void)observeValueForKeyPath:(nullableNSString*)keyPath ofObject:(nullableid)object change:(nullableNSDictionary *)change context:(nullablevoid*)context这个方法。

- (void)removeObserver:(NSObject*)observer forKeyPath:(NSString*)keyPath

使用完了,一定要移除。如果不移除,会崩溃的。

kvc和kvo比较:

kvc是键值对编码,kvo键值对观察。

kvc在设置值和获取值的时候,如果当前有这个属性的时候,会进行设置;如果当前没有这个属性的时候,就要进行搜索,其中在搜索之前,要看accessInstanceVariablesDirectly是Yes的时候,才能进行搜索链,这个在操作属性的时候,如果找到,就会设置,找不到,就进入到没有的方法中;如果accessInstanceVariablesDirectly是NO的时候,直接返回没有定义这个属性。kvc不会创建新类。

kvo是对值的观察,如果值改变的时候,就会在底层创建一个新类,对新类进行操作。

kvo和kvc都是在同一个线程中使用,不能在多线程中使用。如果在多线程中使用会出问题。

kvo和NSNotification区别:

kvo是属性观察,NSNotification是对一个model和view之间进行观察。kvo只能在一个线程中,NSNotification可以在多线程中使用。

相关文章

  • iOS原理篇(一): KVO实现原理

    KVO实现原理 什么是 KVO KVO 基本使用 KVO 的本质 总结 一 、 什么是KVO KVO(Key-Va...

  • Objective-C的本质(4)—— KVO本质

    参考:iOS底层原理总结 - 探寻KVO本质iOS-KVO本质 问题一:kvo如果找到对应的属性 KVO不存在查找...

  • iOS知识体系总结-KVO&KVC

    注意:更新内容会同步到GitHub iOSWiki-知识体系总结 总结-KVO&KVC iOS知识点/KVO&KV...

  • OC基础-KVO(2)

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

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

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

  • KVO总结

    KVO是键值对观察,是NSObject的非常正式协议。当创建一个类对象中的属性进行观察的时候,其实在运行的时候,自...

  • KVO总结

    KVO的全称是Key-Value Observing,俗称“键值监听”,可以用于监听某个对象属性值的改变 查看被监...

  • KVO总结

    // // CBRectPositionController.m // KVOPractice // // Cre...

  • iOS-KVC/KVO常见面试题

    iOS面试中,KVC、KVO是经常涉及到的一个面试点,下面来总结一下常见的面试题类型。 一、 KVO 1.KVO的...

  • KVC和KVO总结

    引言 今天看了KVC和KVO的视频,总结一下,便于以后回顾。KVC地址KVO地址 KVC(key-value-co...

网友评论

    本文标题:KVO总结

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