多线程—NSOperation

原创 2015年11月21日 14:43:28
  • NSOperation是个抽象类,并不具备封装操作的能力,必须使用它的子类
  • 使用NSOperation子类的方式有3种
  • NSInvocationOperation
  • NSBlockOperation
  • 自定义子类继承NSOperation,实现内部相应的方法

NSInvocationOperation

  • 创建NSInvocationOperation对象
 - (id)initWithTarget:(id)target selector:(SEL)sel object:(id)arg;
  • 调用start方法开始执行操作
 - (void)start;
  • 一旦执行操作,就会调用target的sel方法
    注意

  • 默认情况下,调用了start方法后并不会开一条新线程去执行操作,而是在当前线程同步执行操作

  • 只有将NSOperation放到一个NSOperationQueue中,才会异步执行操作

NSBlockOperation

  • 创建NSBlockOperation对象
+ (id)blockOperationWithBlock:(void (^)(void))block;
  • 通过addExecutionBlock:方法添加更多的操作
- (void)addExecutionBlock:(void (^)(void))block;

注意
- 只要NSBlockOperation封装的操作数 > 1,就会异步执行操作


NSOperationQueue

  • NSOperationQueue的作用
  • NSOperation可以调用start方法来执行任务,但默认是同步执行的
  • 如果将NSOperation添加到NSOperationQueue(操作队列)中,系统会自动异步执行NSOperation中的操作
  • 添加操作到NSOperationQueue中
- (void)addOperation:(NSOperation *)op;
- (void)addOperationWithBlock:(void (^)(void))block;

最大并发数

  • 同时执行的任务数
- (NSInteger)maxConcurrentOperationCount;
- (void)setMaxConcurrentOperationCount:(NSInteger)cnt;

队列的取消、暂停、恢复

  • 取消队列的所有操作
- (void)cancelAllOperations;
  • 暂停和恢复队列
- (void)setSuspended:(BOOL)b; // YES代表暂停队列,NO代表恢复队列
- (BOOL)isSuspended;

操作依赖

  • NSOperation之间可以设置依赖来保证执行顺序
[operationB addDependency:operationA]; // 操作B依赖于操作A
  • 可以在不同queue的NSOperation之间创建依赖关系

  • 注意:
  • 不能相互依赖
  • 比如A依赖B,B依赖A
版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS多线程编程技术NSThread、Cocoa NSOperation、GCD三者使用详解

简介 iOS有三种多线程编程的技术,分别是: (一)NSThread (二)Cocoa NSOperation (三)GCD(全称:Grand Central Dispatch)...
  • lgm252008
  • lgm252008
  • 2014年10月13日 09:18
  • 14324

iOS 开发之多线程 (GCD与NSOperation)详解

本文转自:http://dev.dafan.info/detail/226124?p=18 概述 何为多线程? 多线程其实针对单核的CPU来设计的,CPPU同一时间只能执行一...
  • Xia0Liang
  • Xia0Liang
  • 2017年04月19日 11:37
  • 845

多线程编程2 - NSOperation

一、NSOperation 1.简介 NSOperation实例封装了需要执行的操作和执行操作所需的数据,并且能够以并发或非并发的方式执行这个操作。 NSOperation本身是抽象基类,因...
  • q199109106q
  • q199109106q
  • 2013年02月02日 22:39
  • 28402

iOS多线程编程之NSOperation和NSOperationQueue的使用

(一)队列里可以加入很多个NSOperation, 可以把NSOperationQueue看作一个线程池,可往线程池中添加操作(NSOperation)到队列中。线程池中的线程可看作消费者,从队列中取...
  • aiyang10
  • aiyang10
  • 2015年10月29日 09:05
  • 381

iOS多线程编程——GCD与NSOperation总结

很长时间以来,我个人(可能还有很多同学),对多线程编程都存在一些误解。一个很明显的表现是,很多人有这样的看法: 新开一个线程,能提高速度,避免阻塞主线程 毕竟多线程嘛,几个线程一起...
  • zhangjunjian127
  • zhangjunjian127
  • 2016年05月04日 15:18
  • 463

iOS开发 自定义NSOPeration

iOS多线程开发中,NSOperation是我们经常使用的,有时系统自带的两个类NSInvocationOperation和NSBlockOperation不能满足我们的需求时就需要我们自定义。 自...
  • huiqin131460
  • huiqin131460
  • 2016年09月13日 16:02
  • 1622

iOS开发中关于多线程的问题(NSOperationQueue,NSThread,GCD)

1.多线程的优点和缺点分别是什么? 答:优点:1、将耗时较长的操作(网络请求、图片下载、音频下载、数据库访问等)放在子线程中执行,可以防止主线程的卡死;2、可以发挥多核处理的优势,提升cpu的使用率...
  • X_codeWKH
  • X_codeWKH
  • 2016年04月06日 20:08
  • 1857

iOS开发 自定义并发NSOperation实战

前一章节已经介绍了如何自定义并发NSOperation,本节将其应用到具体实例,如果自定义并发NSOperation不会,请移步:http://blog.csdn.net/huiqin131460/a...
  • huiqin131460
  • huiqin131460
  • 2016年09月14日 14:44
  • 688

使用NSOperationQueue简化多线程开发和队列的优先级

多线程开发是一件需要特别精心的事情,即使是对有多年开发经验的工程师来说。 为了能让初级开发工程师也能使用多线程,同时还要简化复杂性。各种编程工具提供了各自的办法。对于iOS来说,建议在尽可能的情...
  • kiki1985
  • kiki1985
  • 2013年03月29日 09:40
  • 8027

多线程之NSOperation

GCD与NSOperation的区别: 1.GCD是底层C语言构成的API   NSOperation及其对象时ObjectiveC对象   在GCD中执行队列中执行的是由block构成的任务,...
  • u011291256
  • u011291256
  • 2015年05月07日 08:58
  • 241
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多线程—NSOperation
举报原因:
原因补充:

(最多只允许输入30个字)