一、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子類
建立對象和執行操作:


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


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


代碼1:


代碼2:


注意:隻要nsblockoperation封裝的操作數 > 1,就會異步執行操作
3.nsoperationqueue
nsoperationqueue的作⽤:nsoperation可以調⽤start⽅法來執⾏任務,但預設是同步執行的
如果将nsoperation添加到nsoperationqueue(操作隊列)中,系統會自動異步執行nsoperation中的操作
添加操作到nsoperationqueue中,自動執行操作,自動開啟線程


- (void)addoperation:(nsoperation *)op;
- (void)addoperationwithblock:(void (^)(void))block;


列印效果:
注意:系統自動将nsoperationqueue中的nsoperation對象取出,将其封裝的操作放到一條新的線程中執行。上面的代碼示例中,一共有四個任務,operation1和operation2分别有一個任務,operation3有兩個任務。一共四個任務,開啟了四條線程。通過任務執行的時間全部都是273可以看出,這些任務是并行執行的。
提示:隊列的取出是有順序的,與列印結果并不沖突。這就好比,選手a,bc雖然起跑的順序是先a,後b,然後c,但是到達終點的順序卻不一定是a,b在前,c在後。
下面使用for循環列印,可以更明顯的看出任務是并發執行的。

