天天看點

iOS開發多線程篇—NSOperation簡單介紹

一、nsoperation簡介

1.簡單說明

nsoperation的作⽤:配合使用nsoperation和nsoperationqueue也能實作多線程程式設計

nsoperation和nsoperationqueue實作多線程的具體步驟:

(1)先将需要執行的操作封裝到一個nsoperation對象中

(2)然後将nsoperation對象添加到nsoperationqueue中

(3)系統會⾃動将nsoperationqueue中的nsoperation取出來

(4)将取出的nsoperation封裝的操作放到⼀條新線程中執⾏

2.nsoperation的子類

nsoperation是個抽象類,并不具備封裝操作的能力,必須使⽤它的子類

使用nsoperation⼦類的方式有3種:

(1)nsinvocationoperation

(2)nsblockoperation

(3)自定義子類繼承nsoperation,實作内部相應的⽅法

二、 具體說明

1.nsinvocationoperation子類

建立對象和執行操作:

iOS開發多線程篇—NSOperation簡單介紹
iOS開發多線程篇—NSOperation簡單介紹

說明:一旦執⾏操作,就會調用target的test方法

代碼示例:

iOS開發多線程篇—NSOperation簡單介紹
iOS開發多線程篇—NSOperation簡單介紹

列印檢視:

iOS開發多線程篇—NSOperation簡單介紹

注意:操作對象預設在主線程中執行,隻有添加到隊列中才會開啟新的線程。即預設情況下,如果操作沒有放到隊列中queue中,都是同步執行。隻有将nsoperation放到一個nsoperationqueue中,才會異步執行操作

2.nsblockoperation子類

建立對象和添加操作:

iOS開發多線程篇—NSOperation簡單介紹
iOS開發多線程篇—NSOperation簡單介紹

代碼1:

iOS開發多線程篇—NSOperation簡單介紹
iOS開發多線程篇—NSOperation簡單介紹
iOS開發多線程篇—NSOperation簡單介紹

代碼2:

iOS開發多線程篇—NSOperation簡單介紹
iOS開發多線程篇—NSOperation簡單介紹
iOS開發多線程篇—NSOperation簡單介紹

注意:隻要nsblockoperation封裝的操作數 > 1,就會異步執行操作

3.nsoperationqueue

nsoperationqueue的作⽤:nsoperation可以調⽤start⽅法來執⾏任務,但預設是同步執行的

如果将nsoperation添加到nsoperationqueue(操作隊列)中,系統會自動異步執行nsoperation中的操作

添加操作到nsoperationqueue中,自動執行操作,自動開啟線程

iOS開發多線程篇—NSOperation簡單介紹
iOS開發多線程篇—NSOperation簡單介紹

- (void)addoperation:(nsoperation *)op;

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

iOS開發多線程篇—NSOperation簡單介紹
iOS開發多線程篇—NSOperation簡單介紹

列印效果:

iOS開發多線程篇—NSOperation簡單介紹

注意:系統自動将nsoperationqueue中的nsoperation對象取出,将其封裝的操作放到一條新的線程中執行。上面的代碼示例中,一共有四個任務,operation1和operation2分别有一個任務,operation3有兩個任務。一共四個任務,開啟了四條線程。通過任務執行的時間全部都是273可以看出,這些任務是并行執行的。

提示:隊列的取出是有順序的,與列印結果并不沖突。這就好比,選手a,bc雖然起跑的順序是先a,後b,然後c,但是到達終點的順序卻不一定是a,b在前,c在後。

下面使用for循環列印,可以更明顯的看出任務是并發執行的。

iOS開發多線程篇—NSOperation簡單介紹
iOS開發多線程篇—NSOperation簡單介紹
iOS開發多線程篇—NSOperation簡單介紹

繼續閱讀