美文网首页ios开发小技巧iOSiOS开发
Objective-C结合RAC实现KVO广播功能

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

作者: CrespoXiao | 来源:发表于2015-08-19 16:27 被阅读2155次

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

如果需要监听对象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一样没啥新技术,如果有更棒的主意,请留言。

相关文章

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

    如果不想看下面的文字,看这里:示例代码 如果需要监听对象A属性B值的变化,我们通常会考虑用KVO来实现,faceb...

  • ios开发中使用RAC代替block传值

    RAC可以实现KVO、代理、通知、block的功能,可谓集多功能于一身。本篇文章介绍RAC是如何代替block传值...

  • iOS-ReactiveCocoa简介

    ReactiveCocoa(RAC(是一个在KVO的基础上建立Objective-C的框架,函数式响应式框架,提供...

  • JazzHands 基本使用

    JazzHands 是一个帧动画的库,我们可以结合 Gesture,scrollView,KVO,RAC 制作交互...

  • Rachook伎俩

    signalForSelector 跟系统的kvo实现原理类似。3种方式 1, rac_signalForSele...

  • 复习一下 iOS 基础 (2)

    KVO/KVC KVO 的实现依赖于 Objective-C 强大的 Runtime当观察某对象A时,KVO机制动...

  • KVO - 观察者模式

    什么是KVO? KVO 是 Objective-C 对观察者模式(Observer Pattern)的实现。也是 ...

  • KVO(Key-Value Observing)

    一、KVO简介 KVO 是 Objective-C 对观察者模式(Observer Pattern)的实现,也是 ...

  • KVO 、category实现原理

    一、KVO原理 1. KVO 简介 KVO 是 Objective-C 对观察者设计模式的一种实现。KVO 提供一...

  • 观察者模式- KVO(iOS)

    什么是KVO KVO 是 Objective-C 对观察者模式(Observer Pattern)的实现。也是 C...

本文标题:Objective-C结合RAC实现KVO广播功能

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