IOS - NSOperation详细总结
2015-09-19 09:09
363 查看
1-NSOperation的作用
NSOperation类本身并不能实现什么,但是可以配合两个子类NSInvocationOperation、NSBlockOperation和NSOperationQueue实现多线程。注意点:
1.如果NSInvocationOperation和NSBlockOperation两个子类不配合NSOperationQueue队列使用,会默认让在主线程中同步执行。
2.只有NSOperation添加到NSOperationQueue中才会开启新线程异步操作。
3.NSOperation添加到NSOperationQueue队列后,会自动执行操作,自动开启线程。
(1)NSOperation不添加到队列中,在主线程中执行,以NSInvocationOperation 为例,NSBlockOperation同理 :
// 创建一个任务 NSInvocationOperation *operation=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(operation) object:nil]; // 执行操作 [operation start];
(2)添加到队列中执行
NSInvocationOperation *A=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(operation) object:nil]; NSBlockOperation *B=[NSBlockOperation blockOperationWithBlock:^{ NSLog(@"B%@",[NSThread currentThread] ); }]; NSOperationQueue *queue=[[NSOperationQueue alloc] init]; [queue addOperation:A]; [queue addOperation:B]; // 直接添加block [queue addOperationWithBlock:^{ NSLog(@"addOperationWithBlock执行中。。。%@", [NSThread currentThread] ); }];
2-NSOperation其他用法
(1)队列可以暂停操作,需要开始的时候再开始就好[queue setSuspended:YES];
(2)队列可以把任务全部取消
[queue cancelAllOperations];
(3)NSOperation依赖
现在有三个任务A、B、C,然后添加到队列queue中,如果想要按照一定顺序执行这三个任务,比如A ,B,C顺序执行,只要添加两个依赖关系就可以
[B addDependency:A];
[C addDependency:B];
(4)NSOperation获取主线程,这样任务都在主线程中执行
NSOperationQueue *mainQueue=[NSOperationQueue mainQueue];
(5)NSOperation有一个maxConcurrentOperationCount属性,设置值代表最大开启线程数。
(6)NSoperation的线程通信 举一个回到主线程的例子
// Nsoperation的线程通信 [queue addOperationWithBlock:^{ [[NSOperationQueue mainQueue] addOperationWithBlock:^{ //... }]; }];
相关文章推荐
- Python3写爬虫(四)多线程实现数据爬取
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- C#实现多线程的同步方法实例分析
- 浅谈chuck-lua中的多线程
- C#简单多线程同步和优先权用法实例
- C#多线程学习之(四)使用线程池进行多线程的自动管理
- C#多线程编程中的锁系统(三)
- C#多线程学习之(六)互斥对象用法实例
- 基于一个应用程序多线程误用的分析详解
- C#多线程学习之(三)生产者和消费者用法分析
- C#多线程学习之(一)多线程的相关概念分析
- C#多线程之Thread中Thread.IsAlive属性用法分析
- C#控制台下测试多线程的方法
- Ruby 多线程的潜力和弱点分析