iOS多线程NSOperation的使用
来源:互联网 发布:车牌编码软件 编辑:程序博客网 时间:2024/05/22 10:41
NSOperation是iOS中一种多线程技术的实现,基于GCD,比GCD更加面向对象,和类NSOperationQueue配合使用。NSOperation是一个抽象类,我们不能直接使用它,应该使用它的子类NSInvocationOperation或者NSBlockOperation。
NSInvocationOperation
当我们有需要在子线程中执行的方法时,使用NSInvocationOperation比较方便。
NSInvocationOperation *oper1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run) object:nil];/* 1.放到队列中的操作都是在子线程中执行 * 2.如果不做特殊操作依赖,队列中的操作都是并发的 */NSOperationQueue *queue = [[NSOperationQueue alloc] init];// 主线程队列NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];// 设置队列最大并发数queue.maxConcurrentOperationCount = 4;// 把Operation添加到队列中,系统会自动取出队列中的Operation放到子线程中执行[queue addOperation:oper1];- (void)run { NSLog(@"正在下载图片1----%@",[NSThread currentThread]);}// 2015-12-26 23:00:48.854 NSOperation学习[8816:1300341] 正在下载图片1----<NSThread: 0x7fbc50c18270>{number = 2, name = (null)}
NSBlockOperation
把要在子线程中执行的代码放到Block中。
NSBlockOperation *oper2 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"正在下载图片2----%@",[NSThread currentThread]);}];NSBlockOperation *oper3 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"正在下载图片3----%@",[NSThread currentThread]);}];NSOperationQueue *queue = [[NSOperationQueue alloc] init];queue.maxConcurrentOperationCount = 4;[queue addOperation:oper2];[queue addOperation:oper3];/*2015-12-26 23:17:09.399 NSOperation学习[8838:1309995] 正在下载图片2----<NSThread: 0x7fdeaaf11d30>{number = 2, name = (null)}2015-12-26 23:17:09.399 NSOperation学习[8838:1309994] 正在下载图片3----<NSThread: 0x7fdeaaf2d440>{number = 3, name = (null)}*/
Operation中的依赖关系
NSOperationQueue *queue = [[NSOperationQueue alloc] init];NSBlockOperation *oper1 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"正在下载图片1----%@",[NSThread currentThread]);}];[oper1 setCompletionBlock:^{ /* * 当oper1执行完毕时执行这个block中的代码,这个block所在的线程不是 * 主线程,可能与oper1所在线程一样,也可能不一样。 * */ NSLog(@"完成下载图片1----%@",[NSThread currentThread]);}];NSBlockOperation *oper2 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"正在下载图片2----%@",[NSThread currentThread]);}];NSBlockOperation *oper3 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"正在下载图片3----%@",[NSThread currentThread]);}];// oper3依赖oper1,只有1执行完成之后才能执行3[oper3 addDependency:oper1];// oper3依赖oper2[oper3 addDependency:oper2];[queue addOperation:oper1];[queue addOperation:oper2];[queue addOperation:oper3];/*2015-12-27 01:04:10.575 NSOperation学习[9003:1333576] 正在下载图片1----<NSThread: 0x7ff9e1c33970>{number = 2, name = (null)}2015-12-27 01:04:10.575 NSOperation学习[9003:1333577] 正在下载图片2----<NSThread: 0x7ff9e1f1eba0>{number = 3, name = (null)}2015-12-27 01:04:10.576 NSOperation学习[9003:1333579] 完成下载图片1----<NSThread: 0x7ff9e1d3a7b0>{number = 4, name = (null)}2015-12-27 01:04:10.576 NSOperation学习[9003:1333577] 正在下载图片3----<NSThread: 0x7ff9e1f1eba0>{number = 3, name = (null)}*/
0 0
- iOS多线程NSOperation的使用
- iOS多线程 NSOperation和NSOperationQueue的使用
- iOS多线程编程NSOperation的使用
- NSOperation多线程的使用
- iOS 多线程中NSOperation使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- IOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用 .
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- Oracle-SQL Plus学习总结
- codeforces C. Sorting Railway Cars 贪心
- 文章标题
- 一个用Python编写的股票数据(沪深)爬虫和选股策略测试框架
- 机器视觉开源代码集合
- iOS多线程NSOperation的使用
- Eclipse 使用自己的签名包进行签名
- 易语言浏览网页
- jQuery学习--jQuery选择器
- LinkedBlockingQueue_demo
- ExtJs设置文本框是否可用
- 解决 QT “调试器未设置”问题
- 工具的使用——sublime
- Junit程序书写技巧