ios多线程操作(十一)—— NSOperation的高级操作
- (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");
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。