iOS多线程之NSOperation的使用-创新互联

NSOperation对象描述了一个操作任务;NSOperationQueue对象描述了一个任务队列,相当于GCD的dispatch_queue_t

NSOperation及NSOperationQueue可以任务是GCD之上的面向对象封装

GCD提供了更底层的控制,NSOperationQueue在GCD之上实现了一些方便的功能,这些功能对于开发者而言通常是最好最安全的选择

基本使用步骤 :

    1)定义操作队列

    2)定义操作

    3)将操作添加到队列

提示: 一旦将操作添加到队列,操作就会立即被调度执行

  • 任务队列对象

NSOperationQueue描述了任务队列,使用两种队列:

1)主队列,其中的任务只在主线程中执行,和GCD的主队列一样

+ (NSOperationQueue *)mainQueue

2)自定义队列,其中的任务会在子线程中执行,和GCD的全局队列一样

   使用alloc+init方式创建

NSOperationQueue的其他方法:

- (void)cancelAllOperations  //取消所有的任务
- (void)waitUntilAllOperationsAreFinished //等待至所有任务结束
@property NSInteger maxConcurrentOperationCount //队列中任务的大并发数
@property(assign) dispatch_queue_t underlyingQueue //GCD的底层队列

  • 任务对象及其子类

NSOperation描述了一个任务,是一个抽象类型,应当使用其子类

   NSBlockOperation和NSInvocationOperation

1)NSBlockOperation使用block描述一个任务:

+ (instancetype)blockOperationWithBlock:(void (^)(void))block

   还可以添加block,使其描述多个任务

- (void)addExecutionBlock:(void (^)(void))block

2)NSInvocationOperation使用方法一个任务:

- (instancetype)initWithTarget:(id)target selector:(SEL)sel object:(id)arg

   指定的方法可以有返回值,使用result属性获取

@property(readonly, retain) id result

  • 向任务度列中添加任务

    使用任务队列对象的addOperation方法:

- (void)addOperation:(NSOperation *)operation //不会阻塞当前线程的执行
- (void)addOperations:(NSArray *)ops waitUntilFinished:(BOOL)wait //可以阻塞当前线程

还有一种直接传递block的添加任务方式:

- (void)addOperationWithBlock:(void (^)(void))block

总结:三种添加任务的方式:

   1)addOperationWithBlock:

   2)添加NSBlockOperation任务

   3)添加NSInvocationOperation任务

  • 异步下载图片

任务1:bo1对象,描述了一个下载任务

任务2:bo2对象,将下载后的图像对象显示

   任务1添加到自定义任务队列中,在子线程执行

   任务2添加到主队列中,在主线程执行

    iOS多线程之NSOperation的使用

  • 任务的依赖

通过任务的依赖可以方便地控制多个任务执行的先后顺序

使用NSOperation的addDependency:方法添加依赖

- (void)addDependency:(NSOperation *)operation

如:将上面的代码修改

    iOS多线程之NSOperation的使用

   其中self.img是新添加的一个UIImage属性

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文名称:iOS多线程之NSOperation的使用-创新互联
标题来源:http://azwzsj.com/article/ccejpc.html