簡介
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開始...