RAC一些操作(取消,更新UI,cell去除臟數據)

在subscribe的三個方法中

  1. sendNext方法執行完畢繼續進行sendNext;
  2. 再有錯誤信息時,執行error方法,執行完畢之后,進行執行disposableBlock;
  3. 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完成前一直取值

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容