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...