iOS NSOperation之详解1(NSInvocationOperation,NSBlockOperation,设置依赖)
来源:互联网 发布:怎么查询数据库的用户 编辑:程序博客网 时间:2024/04/30 00:17
1.NSOperation本身是抽象基类,因此必须使用它的子类。
2.Foundation框架提供了两个具体子类供我们使用:NSInvocationOperation和NSBlockOperation
3.我们也可以自定义子类继承NSOperation,重写mian()方法即可。
下面我们通过实际代码一个一个来理解:
1.使用系统提供的两个子类:NSInvocationOperation和NSBlockOperation
</pre></p><p class="p1"><pre name="code" class="objc">-(void)test1{ NSInvocationOperation *operation1=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(fun1) object:nil]; NSInvocationOperation *operation2=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(fun2) object:nil]; NSBlockOperation *operation3=[NSBlockOperation blockOperationWithBlock:^{ NSLog(@"NSBlockOperation3-->%@",[NSThread currentThread]); }]; [operation3 addExecutionBlock:^{ NSLog(@"NSBlockOperation33-->%@",[NSThread currentThread]); }]; //直接使用start,会走在主线程 //[operation1 start]; //放在队列里,会开启异步线程 NSOperationQueue *queue=[[NSOperationQueue alloc]init]; [queue addOperation:operation1]; [queue addOperation:operation2]; [queue addOperation:operation3];}-(void)fun1{ NSLog(@"NSInvocation1-->%@",[NSThread currentThread]);}-(void)fun2{ NSLog(@"NSInvocation2-->%@",[NSThread currentThread]);}
2016-03-11 09:30:46.210 iOS学习_NSOperation2[2562:143581] NSInvocation1--><NSThread: 0x7f9521e0d9b0>{number = 3, name = (null)}2016-03-11 09:30:46.210 iOS学习_NSOperation2[2562:143582] NSInvocation2--><NSThread: 0x7f9521d23960>{number = 2, name = (null)}2016-03-11 09:30:46.211 iOS学习_NSOperation2[2562:143588] NSBlockOperation33--><NSThread: 0x7f9521d23c80>{number = 4, name = (null)}2016-03-11 09:30:46.211 iOS学习_NSOperation2[2562:143583] NSBlockOperation3--><NSThread: 0x7f9521e0aa60>{number = 5, name = (null)}
2.使用自定义子类
新建一个JYOperation子类继承NSOperation
重写main()方法即可
#import "JYOperation.h"@implementation JYOperation-(void)main{ NSLog(@"自定义的NSOperation实现");}@end
然后在需要使用的控制器中导入该头文件即可
//使用自定义的NSOperation子类-(void)test2{ JYOperation *operation=[[JYOperation alloc]init]; //创建队列 NSOperationQueue *queue=[[NSOperationQueue alloc]init]; [queue addOperation:operation];}
3.NSOperation有一个特性是创建operation之间的依赖。可以方便的设置执行特性顺序的任务集。
-(void)test3{ NSBlockOperation *operationA=[NSBlockOperation blockOperationWithBlock:^{ NSLog(@"任务A开始"); sleep(3); NSLog(@"任务A结束"); }]; NSBlockOperation *operationB=[NSBlockOperation blockOperationWithBlock:^{ NSLog(@"任务B开始"); sleep(3); NSLog(@"任务B结束"); }]; NSBlockOperation *operationC=[NSBlockOperation blockOperationWithBlock:^{ NSLog(@"任务C开始"); sleep(3); NSLog(@"任务C结束"); }]; //设置A依赖B,B依赖C [operationA addDependency:operationB]; [operationB addDependency:operationC]; NSOperationQueue *queue=[[NSOperationQueue alloc]init]; [queue addOperations:@[operationA,operationB,operationC] waitUntilFinished:NO];}
1 0
- iOS NSOperation之详解1(NSInvocationOperation,NSBlockOperation,设置依赖)
- iOS 多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用
- 多线程NSOperation--NSInvocationOperation 和 NSBlockOperation 使用(一)
- iOS 多线程详解 NSThread, NSOperationQueue(NSInvocationOperation, NSBlockOperation), GCD
- [IOS 开发] 多线程之 NSBlockOperation和NSInvocationOperation的区别
- ios-day19-03(NSOperation介绍、主队列、自定义队列、NSBlockOperation、NSInvocationOperation)
- IOS多线程之NSThread、NSOperation、NSInvocationOperation
- IOS多线程之NSThread、NSOperation、NSInvocationOperation
- 多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用
- 多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用
- 多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的小结
- 设置NSBlockOperation依赖
- IOS学习笔记23—多线程之NSThread、NSOperation、NSInvocationOperation
- IOS学习笔记23—多线程之NSThread、NSOperation、NSInvocationOperation
- IOS学习笔记23—多线程之NSThread、NSOperation、NSInvocationOperation
- IOS学习笔记23—多线程之NSThread、NSOperation、NSInvocationOperation
- IOS学习笔记23—多线程之NSThread、NSOperation、NSInvocationOperation
- [iOS]NSOperationQueue、NSOperation、NSInvocationOperation相关
- android跳转登陆界面
- 个人常用vim操作以及插件
- Unity官方公布热更新方案性能对比
- Android Touch事件传递机制解析
- RabbitMQ集群高可用部署配置
- iOS NSOperation之详解1(NSInvocationOperation,NSBlockOperation,设置依赖)
- MySQL 安装
- .net面试:简述List与string[]的区别
- C语言的代码内存布局详解
- C++中stringstream常见用法
- Activity overridePendingTransition动画效果
- 斐波拉契数列和汉诺塔问题
- 希尔排序--Java实现
- web 应用加速方案:Varnish