在subscribe的三个方法中
- sendNext方法执行完毕继续进行sendNext;
- 再有错误信息时,执行error方法,执行完毕之后,进行执行disposableBlock;
completed方法执行完毕之后,也进行执行disposableBlock;
后面两个方法都是在执行之后,自动执行disposableBlock进行取消订阅。
在执行disposableBlock块的时候,会执行RACDisposble的类方法disposableWithBlock。
为什么会有这样的一个操作,是因为再取消订阅时,有一些后续操作,像回收内存,释放对象。比如打开文件,再取消之后,需要关闭;也可以类比Java中,try-catch这样的操作
Disposable家族
RACScopedDisposable ——绑定对象生存期
RACSerialDisposable ——可替换的disposable包裹
RACCompoundDisposable ——多个disposable的包裹
要怎么更新UI呢?
通常的做法是使用操作队列但是ReactiveCocoa有更简单的解决办法,在flattenMap:之后添加一个deliverOn:操作就可以转到主线程上了。
注:如果你看一下RACScheduler类,就能发现还有很多选项,比如不同的线程优先级,或者在管道中添加延迟。
cell重用是内容重叠解决方案:
cell是重用的,可能有脏数据,所以上面的代码首先重置图片。然后创建signal来获取图片数据。你之前也遇到过deliverOn:这一步,它会把next事件发送到主线程,这样subscribeNext:block就能安全执行了。
cell.rac_prepareForReuseSignal:Cell复用时的清理。
takeUntil:当给定的signal完成前一直取值