使用步骤 :
(1) 封装要执行的任务
(2) 创建队列
(3) 添加操作到队列中
队列(NSOperationQueue)常见的方法 :
取消所有操作 :[queue cancelAllOperations];
队列的暂停 : [queue setSuspended : YES]; 用户在开始滚动的时候可以暂停下载图片操作
队列的恢复 : [queue setSuspended: NO]; 用户在停止滚动的时候开始下载图片操作
队列也可以直接添加操作 : [queue addOperationWithBlock: ^{}];
获取主队列 :[NSOperationQueue mainQueue];
操作依赖 : [operationA addDependency:operationB];//可以在不同的queue的NSOperation之间创建依赖,但是不能相互依赖
监听操作 : operation.completionBlock = ^{};
NSInvocationOperation与NSBlockOperation 相同点 :
(1) 不添加操作没有放在queue中,是在当前的线程同步执行。
(2) 都要调用start方法才能执行
(3) 如果添加到queue中是不用调用start方法的
NSInvocationOperation与NSBlockOperation 不同点 :
(1) NSBlockOperation 不放在queue中也可以开线程,使用 [blockOperation addExecutionBlock:^(void)block]
自定义NSOperation的步骤和注意 :
(1) 必须实现main函数,在main方法实现具体的操作。
(2) main方法里面写一个@autoreleasepool方法
(3) 在比较耗时的代码的时候就要判断(isCancelled)一下是否已经被取消
相关知识点和注意点 :
(1) NSOperation 是一个抽象类,并不具备封装操作的能力,必须能使用它的子类,必须实现main方法
(2) NSOperation子类类型有 :NSBlcokOperation、NSInvocationOperation、自定义(OPeration)
(3) 最大并发数maxConcurrentOperationCount :最多开的线程操作数,一般设置为2~3;
(4) 插入字典中最好判断一下是否为空