[IOS 开发] 多线程之 NSBlockOperation和NSInvocationOperation的区别
来源:互联网 发布:玫瑰花数 c 语言 n位数 编辑:程序博客网 时间:2024/04/29 23:59
本篇文章主要介绍下多线程下NSBlockOperation和NSInvocationOperation的区别,列举个栗子给大家说明一下。
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"BlockOperation 1 begin"); sleep(2); // 加个睡眠模仿耗时操作 NSLog(@"BlockOperation 1 currentThread = %@", [NSThread currentThread]); NSLog(@"BlockOperation 1 mainThread = %@", [NSThread mainThread]); NSLog(@"BlockOperation 1 end"); }]; [op addExecutionBlock:^{ NSLog(@"BlockOperation 2 begin"); sleep(2); NSLog(@"BlockOperation 2 currentThread = %@", [NSThread currentThread]); NSLog(@"BlockOperation 2 mainThread = %@", [NSThread mainThread]); NSLog(@"BlockOperation 2 end"); }]; [op addExecutionBlock:^{ NSLog(@"BlockOperation 3 begin"); sleep(2); NSLog(@"BlockOperation 3 currentThread = %@", [NSThread currentThread]); NSLog(@"BlockOperation 3 mainThread = %@", [NSThread mainThread]); NSLog(@"BlockOperation 3 end"); }]; [op addExecutionBlock:^{ NSLog(@"BlockOperation 4 begin"); sleep(2); NSLog(@"BlockOperation 4 currentThread = %@", [NSThread currentThread]); NSLog(@"BlockOperation 4 mainThread = %@", [NSThread mainThread]); NSLog(@"BlockOperation 4 end"); }]; [op addExecutionBlock:^{ NSLog(@"BlockOperation 5 begin"); sleep(2); NSLog(@"BlockOperation 5 currentThread = %@", [NSThread currentThread]); NSLog(@"BlockOperation 5 mainThread = %@", [NSThread mainThread]); NSLog(@"BlockOperation 5 end"); }]; [op addExecutionBlock:^{ NSLog(@"BlockOperation 6 begin"); sleep(2); NSLog(@"BlockOperation 6 currentThread = %@", [NSThread currentThread]); NSLog(@"BlockOperation 6 mainThread = %@", [NSThread mainThread]); NSLog(@"BlockOperation 6 end"); }]; [op addExecutionBlock:^{ NSLog(@"BlockOperation 7 begin"); sleep(2); NSLog(@"BlockOperation 7 currentThread = %@", [NSThread currentThread]); NSLog(@"BlockOperation 7 mainThread = %@", [NSThread mainThread]); NSLog(@"BlockOperation 7 end"); }]; NSLog(@"start"); [op start]; NSLog(@"end");
执行结果:
从执行结果可以看出, NSBlockOperation是优先使用主线程,主线程在忙的情况下再使用子线程。
2.接下来介绍NSInvocationOperation
NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init]; //初始化操作队列 [operationQueue setMaxConcurrentOperationCount:3]; //同时容许几个线程在执行 // 可以传递一个 NSObject 给operation的操作方法 NSDictionary *dict = [NSDictionary dictionaryWithObject:@"value1" forKey:@"key"]; NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(operationSelector:) object:dict]; NSInvocationOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(operationSelector:) object:dict]; NSInvocationOperation *op2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(operationSelector:) object:dict]; NSInvocationOperation *op3 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(operationSelector:) object:dict]; NSInvocationOperation *op4 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(operationSelector:) object:dict]; [operationQueue addOperation:op]; [operationQueue addOperation:op1]; [operationQueue addOperation:op2]; [operationQueue addOperation:op3]; [operationQueue addOperation:op4];// NSInvocationOperation 操作执行的方法- (void)operationSelector:(NSDictionary *)dict{ // 接收传进来的dict NSLog(@"dictValue = %@", [dict valueForKey:@"key"]); sleep(2); // 加个睡眠模仿耗时操作 NSLog(@"currentThread = %@", [NSThread currentThread]); NSLog(@"mainThread = %@", [NSThread mainThread]);}
执行结果:
从执行结果可以看出, NSInvocationOperation都是异步在子线程中执行。
总结:NSBlockOperation是优先使用主线程,NSInvocationOperation在子线程中执行。俩者都是异步执行的。
阅读全文
0 0
- [IOS 开发] 多线程之 NSBlockOperation和NSInvocationOperation的区别
- iOS 多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用
- 多线程NSOperation--NSInvocationOperation 和 NSBlockOperation 使用(一)
- iOS 多线程详解 NSThread, NSOperationQueue(NSInvocationOperation, NSBlockOperation), GCD
- 多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用
- 多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用
- 多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的小结
- iOS 多线程之NSInvocationOperation
- ios多线程之NSInvocationOperation
- iOS NSOperation之详解1(NSInvocationOperation,NSBlockOperation,设置依赖)
- IOS多线程_NSThread和NSInvocationOperation
- iOS 开发,用 NSInvocationOperation 和 OperationQueue 做多线程操作
- [iphone开发多线程之]多线程之NSInvocationOperation
- 多线程之NSInvocationOperation NSInvocationOperation & NSOperationQueue
- IOS多线程之NSThread、NSOperation、NSInvocationOperation
- IOS多线程之NSThread、NSOperation、NSInvocationOperation
- NSBlockOperation 和NSInvocationOperation 默认创建出来start都是同步的。在当前线程执行
- NSInvocationOperation、NSBlockOperation、NSOperationQueue
- CentOS 7 系列(四)系统服务配置 服务(Service)
- HashMap源码学习1
- CryEngine 动态添加模型
- 搭建环境遇到的问题
- 用十条命令在一分钟内检查 Linux 服务器性能
- [IOS 开发] 多线程之 NSBlockOperation和NSInvocationOperation的区别
- struts2.5.10的安装配置
- ionic 开发WebApp入门
- JavaScript基础知识点归纳
- linux(CentOS 7.0) yum安装mysql
- Java中DateTime和SimpleDateFormat的性能比较
- C++中的逗号运算符
- 什么是高/低方差、高/低偏差、(推荐阅读)
- JVM调优总结 -Xms -Xmx -Xmn -Xss