一、并發數
(1)并發數:同時執⾏行的任務數.比如,同時開3個線程執行3個任務,并發數就是3
(2)最大并發數:同一時間最多隻能執行的任務的個數。
(3)最⼤大并發數的相關⽅方法
- (nsinteger)maxconcurrentoperationcount;
- (void)setmaxconcurrentoperationcount:(nsinteger)cnt;
說明:如果沒有設定最大并發數,那麼并發的個數是由系統記憶體和cpu決定的,可能記憶體多久開多一點,記憶體少就開少一點。
注意:num的值并不代表線程的個數,僅僅代表線程的id。
提示:最大并發數不要亂寫(5以内),不要開太多,一般以2~3為宜,因為雖然任務是在子線程進行處理的,但是cpu處理這些過多的子線程可能會影響ui,讓ui變卡。
二、隊列的取消,暫停和恢複
(1)取消隊列的所有操作
- (void)cancelalloperations;
提⽰:也可以調用nsoperation的- (void)cancel⽅法取消單個操作
(2)暫停和恢複隊列
- (void)setsuspended:(bool)b; // yes代表暫停隊列,no代表恢複隊列
- (bool)issuspended; //目前狀态
(3)暫停和恢複的适用場合:在tableview界面,開線程下載下傳遠端的網絡界面,對ui會有影響,使使用者體驗變差。那麼這種情況,就可以設定在使用者操作ui(如滾動螢幕)的時候,暫停隊列(不是取消隊列),停止滾動的時候,恢複隊列。
三、操作優先級
(1)設定nsoperation在queue中的優先級,可以改變操作的執⾏優先級
- (nsoperationqueuepriority)queuepriority;
- (void)setqueuepriority:(nsoperationqueuepriority)p;
(2)優先級的取值
nsoperationqueuepriorityverylow = -8l,
nsoperationqueueprioritylow = -4l,
nsoperationqueueprioritynormal = 0,
nsoperationqueuepriorityhigh = 4,
nsoperationqueuepriorityveryhigh = 8
說明:優先級高的任務,調用的幾率會更大。
四、操作依賴
(1)nsoperation之間可以設定依賴來保證執行順序,⽐如一定要讓操作a執行完後,才能執行操作b,可以像下面這麼寫
[operationb adddependency:operationa]; // 操作b依賴于操作
(2)可以在不同queue的nsoperation之間建立依賴關系
注意:不能循環依賴(不能a依賴于b,b又依賴于a)。
(3)代碼示例
列印檢視:
a做完再做b,b做完才做c。
注意:一定要在添加之前,進行設定。
提示:任務添加的順序并不能夠決定執行順序,執行的順序取決于依賴。使用operation的目的就是為了讓開發人員不再關心線程。
5.操作的監聽
可以監聽一個操作的執行完畢
- (void (^)(void))completionblock;
- (void)setcompletionblock:(void (^)(void))block;
代碼示例
第一種方式:可以直接跟在任務後面編寫需要完成的操作,如這裡在下載下傳圖檔後,緊跟着下載下傳第二張圖檔。但是這種寫法有的時候把兩個不相關的操作寫到了一個代碼塊中,代碼的可閱讀性不強。
第二種方式:
說明:在上一個任務執行完後,會執行operation.completionblock=^{}代碼段,且是在目前線程執行(2)。