如果不想看下面的文字,看这里:示例代码
如果需要监听对象A属性B值的变化,我们通常会考虑用KVO来实现,facebook开源了一个库简化KVO监听与移除监听的流程:
https://github.com/facebook/KVOController
试想一下,如果有很多很多地方需要监听对象A属性B值的变化呢?方法有很多,我随便说说:
1.在这个对象A属性B的setter方法里post消息,需要监听的地方接受监听消息。
2.每一个需要监听的地方进行KVO代码编写,观察对象A属性B值的变化。
3.创建一个观察者来来监听对象A属性B值的变化,然后通过回调广播出去。
当然,还有一些其他的设计模式都可以实现这个功能。我这里讲讲第3点我的实现思路。
1.监听属性的变化:
这段代码的作用就是使用RAC来观察token的变化,如有变化,就通过block的方式广播给所有需要监听的对象。监听放到Appdelegate或者其他比较早运行模块都行。
2.注册监听方法:
注释写得很清楚了,每个对象只注册1次,对象销毁前移除监听。需要说明的是,对象与回调的关联使用的是对象内存地址与block,如果直接使用对象,就算传参是weakSelf,在添加到array的时候retainCount加1,在RAC释放那里就不执行了,造成内存泄漏。
3.注册与移除注册代码实现:
4.使用示例:
讲完了,我不喜欢啰里八嗦,就是分享一个思路,就像REST/AJAX一样没啥新技术,如果有更棒的主意,请留言。