美文网首页iOS
多线程编程之NSOperation/NSOperationQue

多线程编程之NSOperation/NSOperationQue

作者: 阿咿呀嘿 | 来源:发表于2015-04-05 12:17 被阅读61次

NSOperation/NSOperationQueue是基于GCD实现的Objective-C的API

NSOperation/NSOperationQueue是面向对象的

NSOperation/NSOperationQueue可以实现限制最大并发数量和操作之间依赖关系的特性

一、NSOperationQueue队列类型

1、主队列

NSOperationQueue *queue = [NSOperationQueue mainQueue];

2、自定义队列

NSOperationQueue *myQueue = [[NSOperationQueue alloc] init];

//设置最大并发数量

myQueue.maxConcurrentOperationCount=10;

二、操作类型

1、调度操作-使用selector

NSInvocationOperation *invocationOP = [[NSInvocationOperation  alloc] initWithTarget:self  selector:@selector(operationAction:) object:@"invocationOP:something"];

2、定义块操作-使用BLOCK

NSBlockOperation *blockOP = [NSBlockOperation blockOperationWithBlock:^{

NSLog(@"blickOP:%@", [NSThread currentThread]);

}];

三、定义操作之间的依赖关系

//为操作增加依赖关系:invocationOP执行完后才执行blockOP

[blockOP addDependency:invocationOP];

四、执行操作

1、将操作添加到指定队列后,立即自动开始执行操作

[queue addOperation:invocationOP];

[myQueue addOperationWithBlock:^{

NSLog(@"block:%@",[NSThread currentThread]);

}];

2、手动开始执行操作,会在当前队列开始执行

[blockOP start];

可以通过重写操作对象的start方法或main方法实现自定义的执行方式。

五、获取队列中的操作数

NSLog(@"myQueue:%lu",(unsignedlong)myQueue.operationCount);

六、获取操作的优先级

NSLog(@"invocationOP:%li",invocationOP.queuePriority);

七、获取操作的状态:isExecuting/isFinished/isCanceled/isConcurrent

NSLog(@"invocationOP:%i",blockOP.isExecuting);

相关文章

网友评论

    本文标题:多线程编程之NSOperation/NSOperationQue

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