多线程编程之NSOperation/NSOperationQueue

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项。当然也会给出几种多线程的案...
    伯恩的遗产阅读 275,840评论 251 2,328
  • 一.资源抢夺 2> 资源抢夺解决方案 @sychronized{ } dispatch_barrier_async...
    蓝心儿的蓝色之旅阅读 1,494评论 0 4
  • 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项。当然也会给出几种多线程的案...
    张战威ican阅读 727评论 0 0
  • 概述 这篇文章中,我不会说多线程是什么、线程和进程的区别、多线程有什么用,当然我也不会说什么是串行、什么是并行等问...
    hashakey阅读 394评论 0 0
  • 一、基本概念 线程是用来执行任务的,线程彻底执行完任务A才能执行任务B,为了同时执行两个任务,产生了多线程 1、进...
    空白Null阅读 839评论 0 3

友情链接更多精彩内容