- <李>
<强> 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添加到主队列中,在主线程执行
,,,, <李>
<强>任务的依赖强>
李>通过任务的依赖可以方便地控制多个任务执行的先后顺序
使用NSOperation的addDependency:方法添加依赖
安康;(void) addDependency: (NSOperation *)操作如:将上面的代码修改