多執行緒NSOperation

2022-07-19 18:42:15 字數 2740 閱讀 2618

簡介

nsoperation的作用

配合使用nsoperation和nsoperationqueue也能實現多執行緒程式設計

nsoperation和nsoperationqueue實現多執行緒的具體步驟

先將需要執行的操作封裝到乙個nsoperation物件

然後將nsoperation物件新增到nsoperationqueue中

系統會自動將nsoperationqueue中的nsoperation取出來

將取出的nsoperation封裝的操作放到一條新執行緒中執行

nsoperation的子類

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

使用nsoperation子類的方式有3種

nsinvocationoperation

nsblockoperation

自定義子類繼承nsoperation,實現內部相應的方法

nsinvocationoperation

建立nsinvocationoperation物件

- (id)initwithtarget:(id)target selector:(sel)sel object:(id)arg;

呼叫start方法開始執行操作

- (void)start;

一旦執行操作,就會呼叫target的sel方法

注意預設情況下,呼叫了start方法後並不會開一條新執行緒去執行操作,而是在當前執行緒同步執行操作

只有將nsoperation放到乙個nsoperationqueue中,才會非同步執行操作

nsblockoperation

建立nsblockoperation物件

+ (id)blockoperationwithblock:(void (^)(void))block;

通過addexecutionblock:方法新增更多的操作

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

注意:只要nsblockoperation封裝的運算元 > 1,就會非同步執行操作

nsoperationqueue

nsoperationqueue的作用

nsoperation可以呼叫start方法來執行任務,但預設是同步執行的

如果將nsoperation新增到nsoperationqueue(操作佇列)中,系統會自動非同步執行nsoperation中的操作

新增操作到nsoperationqueue中

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

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

最大併發數

什麼是併發數

同時執行的任務數

比如,同時開3個執行緒執行3個任務,併發數就是3

最大併發數的相關方法

- (nsinteger)maxconcurrentoperationcount;

- (void)setmaxconcurrentoperationcount:(nsinteger)cnt;

佇列的取消、暫停、恢復

取消佇列的所有操作

- (void)cancelalloperations;

暫停和恢復佇列

- (void)setsuspended:(bool)b; // yes代表暫停佇列,no代表恢復佇列

- (bool)issuspended;

操作依賴

nsoperation之間可以設定依賴來保證執行順序

比如一定要讓操作a執行完後,才能執行操作b,可以這麼寫

[operationb adddependency:operationa]; // 操作b依賴於操作a

可以在不同queue的nsoperation之間建立依賴關係

操作的監聽

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

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

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

自定義nsoperation

多執行緒 NSOperation

多執行緒 nsoperation nsoperation的作用 p配合使用nsoperation和nsoperationqueue也能實現多執行緒程式設計 pnsoperation和nsoperationqueue實現多執行緒的具體步驟 p先將需要執行的操作封裝到乙個nsoperation物件中 p...

iOS 多執行緒NSOperation

nsoperation有兩個子類 nsinvocationoperation 和 nsblockoperation nsoperation 如果有多個任務事,預設是非同步執行的,如下 nsblockoperation operation nsblockoperation blockoperation...

iOS多執行緒 NSOperation

他是乙個抽象類,能夠與nsoperationqueue結合實現多執行緒操作。要使用nsoperation,需要實現它的子類 nsinvocationoperation nsblockoperation和自定義類。實現思路 1 建立nsoperationqueue佇列物件 2 執行操作 start開始...