Objective-C结合RAC实现KVO广播功能

如果不想看下面的文字,看这里:示例代码

如果需要监听对象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.监听属性的变化:

监听token的变化

这段代码的作用就是使用RAC来观察token的变化,如有变化,就通过block的方式广播给所有需要监听的对象。监听放到Appdelegate或者其他比较早运行模块都行。

2.注册监听方法:

注册监听

注释写得很清楚了,每个对象只注册1次,对象销毁前移除监听。需要说明的是,对象与回调的关联使用的是对象内存地址与block,如果直接使用对象,就算传参是weakSelf,在添加到array的时候retainCount加1,在RAC释放那里就不执行了,造成内存泄漏。

3.注册与移除注册代码实现:

注册与移除注册

  4.使用示例:

使用示例

讲完了,我不喜欢啰里八嗦,就是分享一个思路,就像REST/AJAX一样没啥新技术,如果有更棒的主意,请留言。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,199评论 19 139
  • 一、概述 笔者 强烈推荐 大家在阅读本文之前,还请先移步阅读👉 iOS 关于MVC和MVVM设计模式的那些事 和...
    CoderMikeHe阅读 15,729评论 28 147
  • 上半年有段时间做了一个项目,项目中聊天界面用到了音频播放,涉及到进度条,当时做android时候处理的不太好,由于...
    DaZenD阅读 3,051评论 0 26
  • 其实,我们都是自卑的。 曾经的我,就是腼腆又自卑。 从小学到高中,我的成绩都只是班上中上水平,属于顺其自然,野蛮生...
    一肆阅读 622评论 5 12
  • 表现形式 纵向设定padding:x y可以横向纵向拉伸盒子
    c59ffede9db6阅读 137评论 0 0