在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完成前一直取值