NSOperationQueue

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

你可能感兴趣的:(NSOperationQueue)