11 NSOperation的其他操作

2021-08-19 20:27:41 字數 3195 閱讀 2224

1、最大併發數

1)什麼是併發數:同時執行的任務書

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

2)最大併發數的相關方法

- (nsinteger) maxconcurrentoperationcount;

- (void) setmaxconcurretoperationcount: (nsinteger) cnt;

3)執行的過程

·把操作新增到佇列self.queue addoperationwithblock

·去執行緒池去取空閒的執行緒,如果沒有就建立新執行緒

·把操作交給從執行緒池中取出的執行緒執行操作

·執行完成後,把執行緒再放回執行緒池中

·重複2,3,4的步驟,直到所有的操作都執行完畢

2、佇列的取消、暫停和恢復

1)取消佇列的操作

- (void) cancel; 該方法取消單個操作

- (void) cancelallopertions; 該方法取消所有操作

2)暫停和恢復佇列的操作

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

- (bool) issupspended; 判斷該佇列是否處於暫停狀態

3、操作的併發數、取消、暫停和恢復的演示案例

@inte***ce viewcontroller ()

//全域性佇列

@property (nonatomic, strong) nsoperationqueue *queue;

@end

@implementation viewcontroller

//懶載入

- (nsoperationqueue *)queue

return _queue;

}- (void)viewdidload ];}}

//取消所有操作 當前正在執行的操作會執行完畢,取消後續的所有操作

- (ibaction)cancel:(id)sender

//暫停 操作 當前正在執行的操作,會執行完畢,後續的操作會暫停

- (ibaction)suspend:(id)sender

//繼續 操作

- (ibaction)resume:(id)sender

//當操作執行完畢,會從佇列中移除

- (void)touchesbegan:(nsset*)touches withevent:(uievent *)event

@end

4、操作的優先順序

1)設定nsoperation在queue中的優先順序,可以改變操作的執行優先順序

- (nsoperationqueuepriority) queuepriority;

- (void) setqueuepriority: (nsoperationqueuepriority) p;

2)ios8以後推薦使用服務質量 qualityofservice

5、監聽乙個操作完成

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

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

6、操作的優先順序及操作完成監聽的演示案例

@inte***ce viewcontroller ()

@property (nonatomic, strong) nsoperationqueue *queue;

@end

@implementation viewcontroller

//懶載入

- (nsoperationqueue *)queue

return _queue;

}- (void)viewdidload

}];//設定優先順序最高

op1.qualityofservice = nsqualityofserviceuserinteractive;

[self.queue addoperation:op1];

//等操作完成,執行 執行在子執行緒上

[op1 setcompletionblock:^];

//操作2

nsblockoperation *op2 = [nsblockoperation blockoperationwithblock:^

}];//設定優先順序最低

op2.qualityofservice = nsqualityofservicebackground;

[self.queue addoperation:op2];

}- (void)didreceivememorywarning

@end

7、操作依賴

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

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

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

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

@inte***ce viewcontroller ()

@property (nonatomic, strong) nsoperationqueue *queue;

@end

@implementation viewcontroller

- (nsoperationqueue *)queue

return _queue;

}- (void)viewdidload ];

nsblockoperation *op2 = [nsblockoperation blockoperationwithblock:^];

nsblockoperation *op3 = [nsblockoperation blockoperationwithblock:^];

//設定操作間的依賴

[op2 adddependency:op1];

[op3 adddependency:op2];

//錯誤,會發生迴圈依賴,什麼都不執行

//[op1 adddependency:op3];

//操作新增到佇列中

[self.queue addoperations:@[op1,op2] waituntilfinished:no];

//依賴關係可以誇佇列執行

[[nsoperationqueue mainqueue] addoperation:op3];

}@end

NSOperation的繼承實現

1.執行緒同步 原子操作,條件鎖,遞迴鎖,synchronized nscondition 同步執行的順序。2.執行緒間通訊 在主線程做事 performselectoronmainthread 在子執行緒做事 performselectorinbackground 在指定執行緒做事 perform...

NSOperation的基本使用

viewcontroller.m nsoperation的基本使用 nsoperation的作用 配合使用nsopertaion和nsoperationqueue也能實現多執行緒程式設計 nsopertaion和nsoperationqueue實現多執行緒的具體步驟 先將需要執行的操作封裝到乙個ns...

NSOperation的簡單使用

1.預設情況下,nsoperation並不具備封裝操作的能力,必須使用它的子類,使用nsoperation子類的方式有3種 1 nsinvocationoperation 2 nsblockoperation 3 自定義子類繼承nsoperation,實現內部相應的方法 這講先介紹如何用nsoper...