-(IBAction)operationQueue:(id)sender{
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
queue.maxConcurrentOperationCount = 10;//最多添加10個線程。NSOperationQueueDefaultMaxConcurrentOperationCount 默認值
//queue.suspended = YES;//暫停隊列
//queue.suspended = YES;//重新開始隊列
//[queue cancelAllOperations];//取消隊列“cancelAllOperations”並沒有做太多的工作,他只是對隊列中的每一個操作調用“cancel”方法 — 這並沒有起很大作用!:] 如果一個操作並沒有開始,然後你對它調用“cancel”方法,操作會被取消,並從隊列中移除。然而,如果一個操作已經在執行了,這就要由單獨的操作去識別撤銷(通過檢查isCancelled屬性)然後停止它所做的工作。
queue.name = @"測試隊列";
int index = 1;
MyTask *task = [[MyTask alloc]init];
task.operationId = index++;
//[task cancel];//當任務啓動的時候,需要具體的進程來取消
[task setQueuePriority:NSOperationQueuePriorityHigh];//優先級
[queue addOperation:task];
/// 還可以繼續添加任務
/*
task = [[MyTask alloc]init];
task.operationId = index++;
[queue addOperation:task];
//兩個操作提交的時間間隔很近,線程池中的線程,誰先啓動是不定的
*/
/// 按照順序執行
task = [[MyTask alloc]init];
task.operationId = index++;
if([[queue operations]count]>0){
MyTask *task2 = [[queue operations]lastObject];
[task addDependency:task2];//添加依賴
//[task removeDependency:task2];//移除依賴
}
[queue addOperation:task];
// blockqueue
[queue addOperationWithBlock:^{
[NSThread sleepForTimeInterval:3];
[[NSOperationQueue mainQueue]addOperationWithBlock:^{
DLog(@"回到主線程完成任務");
}];
}];
}
pragma mark - NSOperationQueueViewController
- (IBAction)NSOperationQueueViewController:(id)sender{
OperationViewController * vc = [[OperationViewController alloc]init];
[self.navigationController pushViewController:vc animated:YES];
}