NSOperation的子类
NSInvocationOperation
NSBlockOperation
自定义子类继承NSOperation,实现内部相应的方法
创建线程
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"%@",[NSThread currentThread]);
}];
启动线程
[op1 start];
追加任务
如果一个操作中的任务数量大于1,那么可能会开子线程并发执行任务(可能在主线程中执行,也可能在子线程中执行)
[op1 addExecutionBlock:^{
NSLog(@"%@",[NSThread currentThread]);
}];
NSOperation队列
[NSOperationQueue mainQueue];//创建主队列
NSOperationQueue *opQueue = [[NSOperationQueue alloc] init];//创建非主队列(同时具备串行和并行的功能)
添加到队列中
[opQueue addOperation:op1];
[op Queue addOperationWithBlock:^{
NSLog(@"%@",[NSThread currentThread]);
}];
控制最大并发数(同一时间最多多少任务可以执行,如果设置是1,则是串行队列,如果 > 1,则是并行队列,如果 = -1,则表示不受限制)
串行执行任务!= 1条线程
opQueue.maxConcurrentOperationCount = 5;
暂停(不能暂停正在处于执行状态的任务)
队列中任务的状态:已经执行完毕 | 正在执行 | 排队等待状态
[opQueue setSuspended:YES];
继续
[opQueue setSuspended:NO];
取消(不能取消正在处于执行状态的任务)
[opQueue cancelAllOperations];
添加依赖,注意不能循环依赖(先执行任务2再执行任务1)
[op1 addDependency:op2];
添加监听(任务执行完毕会调用)
op2.completionBlock = ^{
NSLog(@"op2执行完毕了");
};
NSOperation实现线程间通信
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
}];