iOS中KVO及KVOController原理使用

作者: 52xpz | 来源:发表于2017-03-06 15:39 被阅读555次

KVO是观察者模式的一种实现,利用KVO机制,能很方便地观察对象某个属性的变化。KVO的用法如下

1、添加KVO观察

调用方法addObserver添加KVO、调用方法removeObserver移除KVO

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

- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath context:(nullable void *)context NS_AVAILABLE(10_7, 5_0);

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

2、KVO回调

当观察的属性发生变化的时候,通过如下方法通知给调用者

- (void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable id)object change:(nullable NSDictionary*)change context:(nullable void *)context

从上面可知,如果在项目中频繁使用KVO尤其在一个VC里面要进行多次KVO,那么我们的observeValueForKeyPath方法基本上就是这样写了

- (void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable id)object change:(nullable NSDictionary*)change context:(nullable void *)context{

if(object == self.object1){

}

else if(object == self.object2){

}

else if(object == self.objectn){

}

}

除了在observeValueForKeyPath方法里面进行通知,能否扩展如下功能:

1、在block或者selector里面进行通知。

2、支持调用一个方法观察一个对象的多个属性。

3、支持线程安全

而facebook开源的轻量级库KVOController就是为了解决上诉两个问题的。他的实现原理很简单,让所有的观察者通知都走FBKVOController的observeValueForKeyPath方法,通过内部的一个HashTable来保留观察者并且进行通知分发。

相关文章

  • iOS中KVO及KVOController原理使用

    KVO是观察者模式的一种实现,利用KVO机制,能很方便地观察对象某个属性的变化。KVO的用法如下 1、添加KVO观...

  • KVO

    优雅地使用KVO FaceBook KVOController使用 KVOController 进行键值观测可以说...

  • iOS KVO机制的基本使用及实现原理

    我用#CSDN#《iOS KVO机制的基本使用及实现原理》 https://blog.csdn.net/u0112...

  • KVO和KVC的使用及原理解析

    一 KVO基本使用 二 KVO本质原理讲解及代码验证 三 KVC基本使用 四 KVC设值原理 五 KVC取值原理 ...

  • iOS底层学习文章

    iOS黑魔法-Method Swizzling Objective-C 反射机制 KVC原理剖析 KVO原理分析及...

  • 底层原理

    iOS底层原理总结 - Category的本质 KVO详解及底层实现青少年一定要读的KVO指南 iOS 底层解析w...

  • iOS-自定义KVO

    KVO原理及使用 我们之前讨论过KVO的原理,知道KVO机制是生成了一个中间类NSKVONotifying,该中间...

  • KVO的使用以及原理

    iOS KVO的使用以及原理 简介 KVO:(Key - Value - Observer) 键值观察者,是观察者...

  • iOS KVO实现原理及使用

    关于KVO的实现,文章已经很多了,这里阐述我个人的观点,写一些自己的感受 1、简介 KVO(key-value o...

  • KVO简化版本

    直接上简化后的KVO实现代码: 实现原理: 设计一个辅助类KVOController去管理Observer所有的观...

网友评论

    本文标题:iOS中KVO及KVOController原理使用

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