KVO&代理&block&通知中心

KVO:键值观察。
     可以监听对象的属性变化。一旦属性发生变化,立即执行observaValueForKeyPath方法(KVO统一的监听方法)
     1,对象:监听谁,就是谁
     2,参数
     1》观察者:任意的NSObject,
     2》监听键值:
     3》键值观察选项:New , Old 。。。可以用按位或设置数值
     4》上下文:区分观察信息。使用很少,主要在监听多个键值的时候加以区分。
特点:无论监听了多少个键值,都会统一调用一个方法。所以,最好不要监听太多键值,值监听最重要的。

面试题:KVO是同步的还是异步的?
 -同步的。为了保证属性变数时及时作出响应。
     陷阱:一旦在后台线程修改监听对象的键值,会在相同线程调用KVO的方法。
               一旦在KVO执行的方法中,如果要修改某一个对象的属性,可能会涉及到线程安全问题。一不小心,就会出现资源抢夺的问题,需要考虑使用互斥锁。

提示:KVO在日常开发中,绝大多数应该尽量设计的简单。最好坚挺的对象属性,不要跨线程修改。如果一定要在后太修改,注意在监听方法中,代码要考虑加锁。
实际:一般不会使用KVO,但是有些时候,必须使用KVO才能解决问题。

不要忘记dealloc (所有观察者模式不用的时候都要把观察者去掉)
自动布局的底层就是KVO实现的 


******************四者区别*************

1,是否在多个监听者:通知中心是一对多的,代理和block一对一,KVO监听者最少越好。
2,双向通讯(是否有返回值):block和代理可以有返回值,通知中心和KVO没有返回值。Block适合回调数少,2-3个为佳。代理可以适合非常多的事件。
发布了40 篇原创文章 · 获赞 1 · 访问量 9万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章