-(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];
}