天天看點

iOS開發多線程篇—NSOperation基本操作

一、并發數

(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之間建立依賴關系

iOS開發多線程篇—NSOperation基本操作

注意:不能循環依賴(不能a依賴于b,b又依賴于a)。

(3)代碼示例

iOS開發多線程篇—NSOperation基本操作
iOS開發多線程篇—NSOperation基本操作

列印檢視:

iOS開發多線程篇—NSOperation基本操作

a做完再做b,b做完才做c。

注意:一定要在添加之前,進行設定。

提示:任務添加的順序并不能夠決定執行順序,執行的順序取決于依賴。使用operation的目的就是為了讓開發人員不再關心線程。

5.操作的監聽

可以監聽一個操作的執行完畢

- (void (^)(void))completionblock;

- (void)setcompletionblock:(void (^)(void))block;

代碼示例

第一種方式:可以直接跟在任務後面編寫需要完成的操作,如這裡在下載下傳圖檔後,緊跟着下載下傳第二張圖檔。但是這種寫法有的時候把兩個不相關的操作寫到了一個代碼塊中,代碼的可閱讀性不強。

iOS開發多線程篇—NSOperation基本操作
iOS開發多線程篇—NSOperation基本操作

第二種方式:

iOS開發多線程篇—NSOperation基本操作
iOS開發多線程篇—NSOperation基本操作
iOS開發多線程篇—NSOperation基本操作

說明:在上一個任務執行完後,會執行operation.completionblock=^{}代碼段,且是在目前線程執行(2)。

繼續閱讀