iOS开发多线程NSOperation(四)
来源:互联网 发布:数据挖掘r语言实战微盘 编辑:程序博客网 时间:2024/05/17 20:22
NSOperation 可以实现多线程 是一个抽象类 不能直接使用 实现的手段通过该类的子类 NSInvocationOperation NSBlockOperation 实现多线程
NSInvocationOperation 在创建任务时 用一个方法来表示 任务必须放在任务队列中管理 队列保持任务以先进先出的顺序
NSBlockOperation 创建任务时 用一个block来表示
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //1.NSInvocationOperation NSInvocationOperation *operation1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(printA) object:nil]; //operation1代表了任务printA NSInvocationOperation *operation2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(printB) object:nil]; //operation2代表了任务printB //2.NSBlockOperation NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{ [self printC]; }]; // blockOperation代表任务printC //3.创建任务 需要加到任务队列中管理 NSOperationQueue 任务队列 管理多个任务的 //创建队列 NSOperationQueue *queue = [[NSOperationQueue alloc]init]; //设置任务的最大并发数(最多的时候有几个任务同时进行) queue.maxConcurrentOperationCount = 4; //B添加依赖 依赖于A 添加依赖 需要写在加入队列之前 [operation2 addDependency:operation1]; [blockOperation addDependency:operation2];/* //C--> A -->B //A依赖于C B依赖于A [operation1 addDependency:blockOperation]; [operation2 addDependency:operation1];*/ //给队列添加任务 [queue addOperation:operation1]; [queue addOperation:operation2]; [queue addOperation:blockOperation]; //【注意】任务需要加入队列才能执行 否则没有效果 //如果需要将某些任务排序 按照一个固定的顺序执行 可以添加任务间的依赖关系 //A-->B B的执行先决条件是A执行了 B依赖于A //希望取消任务 任务会终止 如果任务已经开始了// [queue cancelAllOperations]; //主线程管理任务的主队列 应用程序启动 也会有 //获取主队列 NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; NSLog(@"%@",mainQueue); // [self mainPrint]; 说明 在生命周期的方法中调用的任务 都是添加到主队列中管理的 //获取当前对列 NSOperationQueue *currentQueue = [NSOperationQueue currentQueue]; //给队列命名(可以用于判断当前执行的是哪一个队列中的方法 主队列名字@“NSOperationQueue main queue”) // queue.name = @"MY_QUEUE"; }- (void)mainPrint{ NSOperationQueue *currentQueue = [NSOperationQueue currentQueue]; NSLog(@"%@",currentQueue); //主队列}- (void)printA{ for (int i = 0; i < 5; i++) { NSLog(@"AAAAAAA"); }}- (void)printB{ for (int i = 0; i < 5; i++) { NSLog(@"BBBBBBBB"); }}- (void)printC{ for (int i = 0; i < 5; i++) { NSLog(@"CCCCCCC"); }}
0 0
- iOS开发多线程NSOperation(四)
- IOS开发 - 多线程 NSOperation
- iOS开发--多线程编程(三)NSOperation
- IOS多线程开发之NSOperation
- iOS开发多线程-自定义NSOperation
- iOS开发 - 多线程之NSOperation
- iOS多线程开发之NSOperation
- iOS-多线程编程学习之NSOperation(四)
- iOS 多线程开发之OperationQueue(二)NSOperation VS GCD
- iOS开发--多线程(NSThread,NSOperation,GCD)
- iOS 多线程(三)NSOperation
- ios 多线程(NSOperation)(swift)
- iOS 多线程(4)NSOperation
- iOS多线程小结( NSOperation)
- iOS 多线程(三)NSOperation
- ios多线程开发——nsoperation详解
- iOS多线程开发(六)---NSOperation/NSOperationQueue
- iOS开发——多线程NSOperation
- [Bootkit]开源Bootkit技术(一)目录&引言
- HDU1896-Stones
- java邮件发送(以163邮箱为例)
- SHP图层处理所用库
- Ubuntu14.04源配置
- iOS开发多线程NSOperation(四)
- Eclipse中tomcat修改端口号
- Android 动态添加view或item并获取数据
- Quartz使用-入门使用(java定时任务实现)
- ES5与ES6 两种形态
- 10道典型的JavaScript面试题(一)
- hiho #1482 : 出勤记录II(DP)
- Ubuntu(Linux)使用Eclipse搭建C/C++编译环境
- 关于typedef的用法总结