iOS總結-多執行緒篇之NSOperation和NSOperationQueue
參考:https://www.jianshu.com/p/4b1d77054b35
NSOperation/NSOperationQueue是基於GCD更高一層的封裝,完全面向物件。
優點:1.可新增完成的程式碼塊,在操作完成後執行
2.新增操作之間的依賴關係,方便控制執行順序
3.設定操作的優先順序
4.可以很方便的取消一個操作的執行
5.使用KVO觀察對操作執行狀態的更改:isExecuteing,isFinished,isCancelled
NSOperation是個抽象類,不能封裝操作,只能使用它的子類來封裝操作
子類NSInvocationOperation
子類NSBlockOperation
自定義繼承自NSOperation的子類
NSOperation需要配合NSoprationQueue來實現多執行緒。我們需要把建立好的操作加入佇列中。
NSOperationQueue有兩種佇列:主佇列、自定義佇列
addOperationWithBlock:新增操作進入佇列中,並併發執行
addDependency:新增操作的依賴關係,注意區分操作的優先順序關係,以及操作執行結束順序
NSOperation、NSOperationQueue控制序列、併發執行,maxConcurrentOperationCount
在主執行緒裡面進行UI重新整理,如點選、滾動、拖延等事件。通常把一些耗時的操作放在其他執行緒,如圖片下載、檔案上傳,完成耗時操作後,需要回到主執行緒。
NSOperation、NSOperationQueue要注意執行緒安全,注意給執行緒加鎖,加鎖方式:@synchronized/NSLock/NSRecursiveLock/NSConditionLock/pthread_mutex/dispatch_semaphore/OSSpinLock/atomic(property)set/get等方式。