对NSOperation/NSOperationQueue的理解
来源:互联网 发布:贵州发展大数据带动 编辑:程序博客网 时间:2024/06/05 12:47
一、NSOperation、NSOperationQueue
1.概述:
NSOperation的作用是实现多线程编程。
NSOperation与NSOperationQueue实现多线程编程的基本步骤为:
(1)先将一个需要的操作封到NSOperation中。
(2)将NSOperation添加到NSOperationQueue中。
(3)系统自动将NSOperationQueue的NSOperation取出。
(4)NSOperation中封装的操作会被放到一条新线程上执行。
2.注意:
NSOperation如同NSObject一样,是个抽象类,所以你必须使用继承于它的子类去封装你需要的操作。
使用子类有3中:
(1)NSInvocationOperation
(2)NSBlockOperation
(3)自定义继承于NSOperation的子类,实现方法。
二、代码实现
1.NSInvocationOperation
- (void)viewDidLoad { [super viewDidLoad]; // 创建对象 封装操作 NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(testAction) object:nil]; // 执行操作 一旦开始操作会调用testAction [operation start];}- (void)testAction{ NSLog(@"---%@---", [NSThread currentThread]);}
执行结果:
***操作对象默认在主线程运行, 在添加到队列后会开辟新的线程。即默认下都是同步执行,放到NSOperationQueue中才会异步执行。
2.NSBlockOperation
- (void)viewDidLoad { [super viewDidLoad]; // 创建NSBlockOperation操作对象 NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"---%@---", [NSThread currentThread]); }]; [operation start];}
// 添加操作 [operation addExecutionBlock:^{ NSLog(@"test2%@", [NSThread currentThread]); }];
执行结果:
***只要block中封装的操作数量大于1就会异步执行。
3.NSOperationQueue
NSOperationQueue的作用是将NSOperation添加到操作队列中,系统会自动异步执行。
- (void)viewDidLoad { [super viewDidLoad]; // 创建NSInvocationOperation对象 NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(testAction) object:nil]; // block方式创建 NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"test2%@", [NSThread currentThread]); }]; // 创建NSOperationQueue NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 把操作添加到队列中 [queue addOperation:operation1]; [queue addOperation:operation2]; // 另一种添加到队列方式 [queue addOperationWithBlock:^{ NSLog(@"test3%@", [NSThread currentThread]); }];}- (void)testAction{ NSLog(@"test1%@", [NSThread currentThread]);}
执行结果:
***可以从任务的时间090看出, 这几个任务都是并行的。
0 0
- 对NSOperation/NSOperationQueue的理解
- NSOperation和NSOperationQueue的理解和学习
- NSOperationQueue、NSOperation理解
- NSOperationQueue 的NSOperation 数
- NSOperationQueue和NSOperation的使用方法
- NSOperationQueue和NSOperation的使用方法
- NSOperationQueue和NSOperation的使用方法
- NSOperation和NSOperationQueue的使用
- NSOperation,NSOperationQueue基本的使用
- NSOperationQueue和NSOperation的使用方法
- NSOperationQueue和NSOperation的使用方法
- NSOperationQueue和NSOperation的使用方法
- NSOPeration NSOperationQueue
- NSOperation NSOperationQueue
- 多线程的使用(2) - NSOperation和NSOperationQueue
- iOS多线程 NSOperation和NSOperationQueue的使用
- 多线程的使用(2) - NSOperation和NSOperationQueue
- 多线程的使用(2) - NSOperation和NSOperationQueue
- 一些细节吧(随时更新)
- 你真的了解visible属性吗
- ANSI C和POSIX
- Auto-Reload Your Vimrc
- hdu 1536 OR poj 2960 S-Nim 博弈论,,求出SG'函数就可以解决
- 对NSOperation/NSOperationQueue的理解
- X的二进制长度
- 星星,停靠模式
- 问题解决索引20150226
- 固定主角出生点——对象层的使用
- Android 开发学习小结
- 手动创建和挂载swap 分区
- 【2014年终总结】拼搏点缀时光,在你我最美的年华
- 第一次开通博客