iOS学习笔记-120.多线程19——NSOperation操作依赖和操作监听
2017-09-06 00:07
441 查看
多线程19NSOperation操作依赖和操作监听
一NSOperation操作依赖
二NSOperation操作监听
三代码示例
四运行结果
比如一定要让操作A 执行完后,才能执行 操作B,可以这么写
可以在不同 queue 的 NSOperation 之间创建依赖关系
![](http://img.blog.csdn.net/20170906000650067?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcWl3ZW5taW5nc2hpd28=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
操作1 依赖于 操作4
操作2 依赖于 操作3
那么我们可以提前知道结果应该是
操作1 在操作4 后执行
操作2 在操作3 后执行
操作1 和 操作2 可能是操作1先执行,也能是操作2执行
操作3 和 操作4 可能是操作3先执行,也能是操作4执行
那么上面的结果其实就 4 四种
如下
可能结果 1
可能结果 2
可能结果 3
可能结果 4
一NSOperation操作依赖
二NSOperation操作监听
三代码示例
四运行结果
多线程19——NSOperation操作依赖和操作监听
一、NSOperation操作依赖
NSOperation 之间可以设置依赖来保证执行顺序比如一定要让操作A 执行完后,才能执行 操作B,可以这么写
[operationB addDependency:operationA]; // 操作B依赖于操作A
可以在不同 queue 的 NSOperation 之间创建依赖关系
二、NSOperation操作监听
- (void (^)(void))completionBlock; - (void)setCompletionBlock:(void (^)(void))block;
三、代码示例
下面的代码中操作1 依赖于 操作4
操作2 依赖于 操作3
那么我们可以提前知道结果应该是
操作1 在操作4 后执行
操作2 在操作3 后执行
操作1 和 操作2 可能是操作1先执行,也能是操作2执行
操作3 和 操作4 可能是操作3先执行,也能是操作4执行
那么上面的结果其实就 4 四种
如下
可能结果 1
操作3 操作4 操作1 操作2
可能结果 2
操作3 操作4 操作2 操作1
可能结果 3
操作4 操作3 操作1 操作2
可能结果 4
操作4 操作3 操作2 操作1
// // QWMViewController4.m // 03_UIview85多线程_NSOperation // // Created by 杞文明 on 17/9/4. // Copyright © 2017年 杞文明. All rights reserved. // // 依赖 #import "QWMViewController4.h" @interface QWMViewController4 () @end @implementation QWMViewController4 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self test]; } -(void)test{ //1.创建队列 NSOperationQueue *queue = [[NSOperationQueue alloc]init]; NSOperationQueue *queue2 = [[NSOperationQueue alloc]init]; //2.封装操作 NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"1---%@",[NSThread currentThread]); }]; NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"2---%@",[NSThread currentThread]); }]; NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"3---%@",[NSThread currentThread]); }]; NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"4---%@",[NSThread currentThread]); }]; //操作监听 op3.completionBlock = ^{ NSLog(@"++++++完啦-----%@",[NSThread currentThread]); }; //添加操作依赖 //注意点:不能循环依赖 //可以跨队列依赖 [op1 addDependency:op4]; [op2 addDependency:op3]; //添加操作到到队列中 [queue addOperation:op1]; [queue addOperation:op2]; [queue addOperation:op3]; [queue2 addOperation:op4]; } @end
四、运行结果
[28848:144530] 3---<NSThread: 0x600000079240>{number = 3, name = (null)} [28848:144526] 4---<NSThread: 0x600000078d00>{number = 4, name = (null)} [28848:144530] 2---<NSThread: 0x600000079240>{number = 3, name = (null)} [28848:144527] 1---<NSThread: 0x6080000789c0>{number = 5, name = (null)} [28848:144526] ++++++完啦-----<NSThread: 0x600000078d00>{number = 4, name = (null)}
相关文章推荐
- IOS学习笔记9—IOS触摸事件监听和操作
- iOS开发NSOperation 三:操作依赖和监听以及线程间通信
- ios学习笔记——操作队列 NSOperation
- iOS学习笔记——数据库操作(使用FMDB)
- IOS学习笔记25—HTTP操作之ASIHTTPRequest(一)
- IOS学习笔记(8)UIPageViewController UIProgressView 监听和响应键盘通知
- iOS学习笔记(十五)——数据库操作(SQLite)
- iOS学习笔记—2—数据库操作(使用FMDB)
- iOS学习笔记-113.多线程12——NSOperation基础
- iOS学习笔记-055.简单矩阵操作
- iOS学习笔记(十六)——数据库操作(使用FMDB)
- iOS: 学习笔记, 使用FMDatabase操作sqlite3
- iOS学习笔记(十七)——文件操作(NSFileManager)
- iOS学习笔记(十五)——数据库操作(SQLite)
- IOS学习笔记23—多线程之NSThread、NSOperation、NSInvocationOperation
- iOS学习笔记-127.SDWebImage3——缓存的清除和操作的取消
- iOS学习笔记——文件操作(NSFileManager)
- iOS学习笔记——文件操作(NSFileManager)
- iOS开发—对NSOperation操作设置依赖关系