美文网首页
多线程(二) -NSOperation和NSOperationQ

多线程(二) -NSOperation和NSOperationQ

作者: 阿John | 来源:发表于2015-08-31 13:55 被阅读0次

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];

相关文章

网友评论

      本文标题:多线程(二) -NSOperation和NSOperationQ

      本文链接:https://www.haomeiwen.com/subject/egtlcttx.html