- (void)cancelAllOperations;
- (void)cancel;
@property (copy) void (^completionBlock)(void) NS_AVAILABLE(10_6, 4_0);
// 新建一个块操作
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
[NSThread sleepForTimeInterval:3.0];
NSLog(@"%@ , come here",[NSThread currentThread]);
}];
// 新建一个操作队列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
// 将操作添加到队列
[queue addOperation:op];
// 监听该操作,当完成该操作后执行的代码
[op setCompletionBlock:^{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSLog(@"%@,here",[NSThread currentThread]);
}];
}];NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"用户登录 %@", [NSThread currentThread]);
}];
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"付费 %@", [NSThread currentThread]);
}];
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
[NSThread sleepForTimeInterval:1.0f];
NSLog(@"下载 %@", [NSThread currentThread]);
}];
NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"更新UI %@", [NSThread currentThread]);
}];
/* "指定任务之间的依赖关系" - GCD使用的同步任务(不会开线程)
NSOperation 会开线程,但是依然能够保证操作的执行顺序,并发效率会更好!
依赖关系,是可以跨队列的 */
// 付费之前需要登录
[op2 addDependency:op1];
// 下载之前需要付费
[op3 addDependency:op2];
// 更新UI之前需要完成下载
[op4 addDependency:op3];
// 注意:在指定依赖关系时,注意不要出现循环依赖
// waitUntilFinished == NO,异步的 YES 是同步的
[self.queue addOperations:@[op1, op2, op3] waitUntilFinished:NO];
// 更新UI的操作,应该由主队列来调度
[[NSOperationQueue mainQueue] addOperation:op4];
NSLog(@"come here");ios多线程操作(十一)—— NSOperation的高级操作
原文:http://blog.csdn.net/u011058732/article/details/44601881