日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RAC的坑

發布時間:2024/8/24 编程问答 35 如意码农
生活随笔 收集整理的這篇文章主要介紹了 RAC的坑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://www.cocoachina.com/industry/20140609/8737.html

1.對數組的觀察

有了這些Category,大部分的Delegate都可以使用RAC來做。或許你會想,可不可以subscribe NSMutableArray.rac_sequence.signal,這樣每次有新的object或舊的object被移除時都能知道,UITableViewController就可以根據dataSource的變化,來reloadData。但很可惜這樣不行,因為RAC是基于KVO的,而NSMutableArray并不會在調用addObject或removeObject時發送通知,所以不可行。不過可以使用NSArray作為UITableView的dataSource,只要dataSource有變動就換成新的Array,這樣就可以了。

2.Cell復用時的清理

說到UITableView,再說一下UITableViewCell,RAC給UITableViewCell提供了一個方法:rac_prepareForReuseSignal,它的作用是當Cell即將要被重用時,告訴Cell。想象Cell上有多個button,Cell在初始化時給每個button都addTarget:action:forControlEvents,被重用時需要先移除這些target,下面這段代碼就可以很方便地解決這個問題:

[[[self.cancelButton
rac_signalForControlEvents:UIControlEventTouchUpInside]
takeUntil:self.rac_prepareForReuseSignal]
subscribeNext:^(UIButton *x) {
// do other things
}];

3.RACCommand自動綁定

button.rac_command = [[RACCommand alloc]initWithEnable:xxx signalBlock:xxx];

button的enabled自動與command的enabled綁定,無需另外聲明。

4.combineLatest觸發時機

combineLatest后面跟的信號集合中,每個信號都有值之后就會第一次觸發,之后,任意一個信號有了新值就會觸發。

rac_liftSelector:withSignals 也是類似,它的意思是當signalA和signalB都至少sendNext過一次,接下來只要其中任意一個signal有了新的內容,相應方法就會自動被觸發。

5.RACObserve自動sendNext

使用RACObserve觀察屬性時,會立即將屬性當前值sendNext.

6.rac_willDeallocSignal不會sendNext,只會sendComplete

7.實踐建議

當一個signal被一個subscriber subscribe后,這個subscriber何時會被移除?答案是當subscriber被sendComplete或sendError時,或者手動調用[disposable dispose]。

當subscriber被dispose后,所有該subscriber相關的工作都會被停止或取消,如http請求,資源也會被釋放。

Signal events是線性的,不會出現并發的情況,除非顯示地指定Scheduler。所以-subscribeNext:error:completed:里的block不需要鎖定或者synchronized等操作,其他的events會依次排隊,直到block處理完成。

Errors有優先權,如果有多個signals被同時監聽,只要其中一個signal sendError,那么error就會立刻被傳送給subscriber,并導致signals終止執行。相當于Exception。

生成Signal時,最好指定Name, -setNameWithFormat: 方便調試。

block代碼中不要阻塞。

 

總結

以上是生活随笔為你收集整理的RAC的坑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。