1.NSOperation本身是抽象基类,因此必须使用它的子类,使用NSOperation子类的方式有2种:
1> Foundation框架提供了两个具体子类直接供我们使用:NSInvocationOperation和NSBlockOperation
2> 自定义子类继承NSOperation,实现内部相应的方法
2.执行操作:NSOperation调用start方法即可开始执行操作,NSOperation对象默认按同步方式执行,NSOperation对象的isConcurrent方法会告诉我们这个操作相对于调用start方法的线程,是同步还是异步执行。isConcurrent方法默认返回NO,表示操作与调用线程同步执行.
3.取消操作:[operation cancel]。
4.监听操作的执行:operation.completionBlock.
5.NSInvocationOperation:1>基于一个对象和selector来创建操作。如果你已经有现有的方法来执行需要的任务,就可以使用这个类。
2>创建并执行操作:NSInvocationOperation *operation = [NSInvocationOperation alloc]initWithTarget:self selector:@selector() object:nil;[operation start];
6.NSBlockOperation:1>能够并发地执行一个或多个block对象,所有相关的block都执行完之后,操作才算完成
2>创建并执行操作:NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:];[operation start];
3>通过addExecutionBlock方法添加block操作(block是并发执行的,也就是在不同线程中执行的).
7.NSOperationQueue(操作队列):1>将NSOperation添加到一个NSOperationQueue(操作队列)中去执行,而且是异步执行的。
2>NSOperationQueue *queue = [NSOperationQueue alloc]init ==>创建一个操作队列
3>添加一个operation:[queue addOperation:operation];
4>添加一组operation:[queue addOperations:operations waitUntilFinished:NO];
5>添加一个block形式的 [operation:queue addOperationWithBlock:];
6>添加NSOperation的依赖对象:[operation2 addDependecny:operation];
删除NSOperation的依赖对象removeDependency;
7>依赖关系会影响到NSOperation对象在queue中的执行顺序.
8>设置队列的最大并发操作数量:queue.maxConcurrentOperationCount;
9>取消Operations:[operation cancel];//取消单个操作
[queue cancelAllOperations];//取消queue中的所有操作。
10>如果需要在当前线程中处理operation完成后的结果,可以使用NSOperation的waitUntilFinished方法阻塞当前线程,等待operation完成。
11>暂停和继续queue:[queue setSuspended:YES];
[queue setSuspended:NO];