1. 程式人生 > >iOS總結-多執行緒篇之NSOperation和NSOperationQueue

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等方式。