天天看點

NSOperationQueue、performSelector優劣——筆記

《Effective Objective-C 2.0  編寫高品質iOS與OS X代碼的52個有效方法》(第四十二條:多用GCD,少用performSelector系列方法)(第四十三條:掌握GCD及操作隊列的使用時機)筆記

要點如下:

1、performSelector可能會導緻記憶體洩漏

因為使用performSelector,編譯器不知道将要調用的選擇子是什麼,也就無法知道方法名,以及是否有傳回值,傳回值是否需要保留和釋放

performSelector能實作的延遲、開一個線程執行任務等功能,都可以用GCD的dispatch_after、dispatch_async等來實作

2、NSOperationQueue(操作隊列)是OC對象,GCD(派發隊列)是純C的API

3、NSOperationQueue操作隊列是通過"addOperationWithBlock:"添加NSBlockOperation來執行任務的

4、NSOperationQueue的優點在于:

*可以取消某個操作:運作某個任務之前可以用cancel取消(因為對象内有個标志位表示此任務是否需要執行),不過已經啟動的任務無法取消。

*可以指定操作間的依賴關系:一個操作可以依賴其他多個操作,如需要多個操作執行完之後才執行某個操作

*可以使用KVO:如使用KVO監聽isCancelled屬性判斷任務是否已取消,監聽isFinished屬性來判斷任務是否已完成

*可以指定操作優先級:優先級高的先執行,優先級低的後執行

*可以重用NSOperation對象:已經定義好了一些方法,可以直接使用,并且符合”可複用“原則

5、NSNotificationCenter使用操作隊列(NSOperationQueue),而不是派發隊列(GCD)

參考:https://www.jianshu.com/p/4b1d77054b35