多线程之NSOperationQueue(线程队列)
来源:互联网 发布:局域网屏幕广播软件 编辑:程序博客网 时间:2024/06/10 20:38
NSOperationQueue的使用
OperationQueue 相比 GCD的优势:
- 1.可以设置依赖关系
- 2.队列可以暂停
- 3.可以取消队列中的操作
NSOpertionQueue NSOperation
Queue
主队列 和 自定义队列
主队列是运行在主线程当中,自定义队列运行在后台
NSOperation 定义需要执行的操作(任务)
定义需要的操作,然后把该操作添加到合适的队列中
- 1.创建队列对象
- 2.创建操作对象
- 3.把操作对象添加到队列之中,等待队列分配线程执行操作
1.创建队列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//最大并发操作数 //队列中最多有几个操作同时执行 queue.maxConcurrentOperationCount = 1; //暂停执行队列中的线程 // [queue setSuspended:YES];
2.创建操作
//NSOperation 不能直接使用 //使用子类的对象// NSOperation *operation = [[NSOperation alloc] init]; NSOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(thread1:) object:@"op1 "]; NSOperation *op2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(thread2:) object:@"op2 "]; NSBlockOperation *op3 = [[NSBlockOperation alloc] init]; [op3 addExecutionBlock:^{ for (int i = 0; i < 10; i++) { NSLog(@"OP1 ----- %d", i); sleep(1); } }]; NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{ for (int i = 0; i < 10; i++) { NSLog(@"OP4 ------------ %d", i); sleep(1); } }];
3.把操作加入到队列中
//加入之后,如果有操作,那队列就会自动执行 [queue addOperation:op1]; [queue addOperation:op2]; [queue addOperation:op3]; [queue addOperation:op4];
4.设置操作的优先级
[op1 setQueuePriority:NSOperationQueuePriorityLow]; [op2 setQueuePriority:NSOperationQueuePriorityNormal]; [op3 setQueuePriority:NSOperationQueuePriorityHigh]; [op4 setQueuePriority:NSOperationQueuePriorityVeryHigh];
5.设置操作之间的依赖关系
- (1)加入队列中时间
- (2)优先级
- (3)依赖关系 (明确指定操作的执行顺序)
[op2 addDependency:op1]; //op2的执行依赖于op1,保证op1肯定op2之前执行
//重新让队列执行 [queue setSuspended:NO];
6.取消所有的操作 不能取消正在执行的操作
sleep(3); [queue cancelAllOperations]; //取消一个操作 [op3 cancel];
6.与此同时主线程也在运行:
for (int i = 0; i < 50; i ++) { NSLog(@"主线程 : %d", i); }
- (void)thread1:(NSString *)name{ //具体要执行的操作 for (int i = 0; i < 50; i ++) { NSLog(@"多线程 %@: %d", name, i); }}- (void)thread2:(NSString *)name{ for (int i = 0; i < 50; i ++) { NSLog(@"多线程 %@: %d", name, i); }}@end
3 0
- 多线程之NSOperationQueue(线程队列)
- iPhone多线程开发之线程队列NSOperationQueue与自定义Protocol
- NSOperationQueue(多线程请求队列)
- 多线程NSInvocation+队列NSOperationQueue+NSBlockOperation
- 多线程编程之 NSOperationQueue
- 多线程之-NSOperationQueue
- 《多线程之NSOPeration/NSOperationQueue》
- 多线程编程之NSOperationQueue
- 多线程编程之NSOperationQueue
- 多线程之NSInvocationOperation NSInvocationOperation & NSOperationQueue
- 多线程之NSOperation和NSOperationQueue
- IOS 多线程编程之NSOperationQueue
- iOS多线程之NSOperation/NSOperationQueue
- NSOperationQueue线程队列完毕finished状态检测
- NSOperationQueue线程队列完毕finished状态检测
- NSOperationQueue 队列
- NSOperationQueue队列
- Android线程—多线程之阻塞队列
- 正则表达式30分钟入门教程
- jquery特效插件网站
- Redis中的RDB持久化和AOF持久化(一)
- Ubuntu上安装wizi
- License数据的实时与保存
- 多线程之NSOperationQueue(线程队列)
- HDU 2059 龟兔赛跑
- 你是这样理解shell编程的嘛?
- POJ 3255 Roadblocks
- 腾讯安全零距离之大眼——大型网络流量分析系统软件篇
- win7中如何解决“该项不适用于在指定状态下使用”
- Java面试题全集(上)
- 使用Tiled制作2D游戏关卡
- 记录我从开发小白一路走来