iOS多线程之NSOperation的使用

   <李>

<强> NSOperation对象的使用步骤

NSOperation对象描述了一个操作任务,NSOperationQueue对象描述了一个任务队列,相当于肾小球囊性肾病的dispatch_queue_t

NSOperation及NSOperationQueue可以任务是肾小球囊性肾病之上的面向对象封装

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

,,,

基本使用步骤:

,,,, 1)定义操作队列

,,,, 2)定义操作

,,,, 3)将操作添加到队列

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


<李>

<强>任务队列对象

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

1)主队列,其中的任务只在主线程中执行,和肾小球囊性肾病的主队列一样

+,(NSOperationQueue  *) mainQueue

2)自定义队列,其中的任务会在子线程中执行,和肾小球囊性肾病的全局队列一样

,,,使用alloc + init方式创建

NSOperationQueue的其他方法:

安康;(空白)cancelAllOperations ,//取消所有的任务   安康;(空白)waitUntilAllOperationsAreFinished //等待至所有任务结束   @property  NSInteger  maxConcurrentOperationCount //队列中任务的最大并发数   @ property(分配),dispatch_queue_t  underlyingQueue //GCD的底层队列


<李>

<强>任务对象及其子类

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

,,,NSBlockOperation和NSInvocationOperation


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

+,(instancetype) blockOperationWithBlock: (void (^)(空白))块

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

安康;(void) addExecutionBlock: (void (^)(空白))块

,,,

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

安康;(instancetype) initWithTarget: (id) target 选择器:(SEL) sel 对象:arg (id)

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

@ property(只读的,,保留),id 结果


<李>

<强>向任务度列中添加任务

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

安康;(void) addOperation: (NSOperation  *) operation //不会阻塞当前线程的执行   安康;(空白)addOperations:(NSArray

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

安康;(void) addOperationWithBlock: (void (^)(空白))块


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

,,,1)addOperationWithBlock:

,,,2)添加NSBlockOperation任务

,,,3)添加NSInvocationOperation任务


<李>

<强>异步下载图片

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

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

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

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

,,,,  iOS多线程之NSOperation的使用“> </p> <p> <br/> </p> <br/> <ul类= <李>

<强>任务的依赖

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

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

安康;(void) addDependency: (NSOperation  *)

操作如:将上面的代码修改

,,,,  iOS多线程之NSOperation的使用“> </p> <p>,,,其中自我。img是新添加的一个界面图像属性</p> <p> <br/> </p><h2 class=iOS多线程之NSOperation的使用