文档章节

使用NSOperationQueue简化多线程开发 (二) 队列的优先级

JeansH
 JeansH
发布于 2012/07/20 15:22
字数 292
阅读 1074
收藏 2

使用NSOperationQueue简化多线程开发中介绍了iOS的操作队列使用方法。这里补充一下队列的优先级功能。

假设现在队列中有多个操作(NSOperation),现在再向队列中加入新的操作,并且希望新增加的操作排在未执行操作的最前面。这时就需要设置操作的优先级了。

编写了个最简单的NSOperation,头文件:

#import <Foundation/Foundation.h>

@interface MyOperation : NSOperation{ 
    NSString *name; 
}

@property (nonatomic,retain) NSString *name;

@end

实现文件:

#import "MyOperation.h"

@implementation MyOperation

@synthesize name;

-(void) main{ 
    NSLog(@"run operation: %@",name); 
    [NSThread sleepForTimeInterval:3]; 
}

@end

 

在控制器里创建3个实例:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    queue=[[NSOperationQueue alloc] init]; 
    [queue setMaxConcurrentOperationCount:1]; 
    
    MyOperation *o1=[[[MyOperation alloc] init] autorelease]; 
    o1.name=@"o1"; 
    [queue addOperation:o1]; 
    
    MyOperation *o2=[[[MyOperation alloc] init] autorelease]; 
    o2.name=@"o2"; 
    [queue addOperation:o2]; 
    
    [NSThread sleepForTimeInterval:1]; 
    
    MyOperation *o3=[[[MyOperation alloc] init] autorelease]; 
    o3.name=@"o3"; 
    [o3 setQueuePriority:NSOperationQueuePriorityHigh]; 
    [queue addOperation:o3];

 

运行效果:

2011-07-26 14:47:23.822 NSOperationQueueDemo[27495:6003] run operation: o1 
2011-07-26 14:47:26.823 NSOperationQueueDemo[27495:6003] run operation: o3 
2011-07-26 14:47:29.824 NSOperationQueueDemo[27495:6203] run operation: o2

 

可见,操作3成功的插到第一个等待操作(操作2)之前执行了。

本文转载自:http://marshal.easymorse.com/archives/4534

共有 人打赏支持
JeansH
粉丝 43
博文 49
码字总数 5995
作品 0
深圳
程序员
私信 提问
【iOS】多线程NSOperation

NSOperation是苹果封装的一套多线程的东西,不像GCD是纯C语言的,这个是OC的。但相比较之下GCD会更快一些,但本质上NSOPeration是多GDC的封装。 一、NSOperation与GCD的比较 GCD是基于c的底层...

xn4545945
2014/07/28
0
0
iOS之[多线程:NSOperation]

NSOperation :fa-exclamation-triangle:以下是你需要考虑使用 NSOperation 的一些理由: 1.当你需要取消线程任务时,GCD 无法提供取消任务的操作。而 NSOperation 提供了取消任务的操作; 2.当...

言筱羽
2015/11/23
95
0
iOS多线程编程之二——NSOperation与NSOperationQueue

iOS多线程编程之二——NSOperation与NSOperationQueue 一、NSOperation解析 NSOperation是基于Object-C封装的一套管理与执行线程操作的类。这个类是一个抽象类,通常情况下,我们会使用NSInv...

珲少
2015/05/19
0
1
iOS多线程:『NSOperation、NSOperationQueue』详尽总结

iOS多线程:『NSOperation、NSOperationQueue』详尽总结 转载: 原地址https://www.jianshu.com/p/4b1d77054b35 本文首发于我的个人博客:『不羁阁』 文章链接:传送门 本文更新时间:2018年0...

法斗斗
2018/04/20
0
0
多线程NSOperation一般使用

一、NSOperation简介 简单说明 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue实现多线程的具体步骤: (1)先将需要执行的操...

朝雨晚风
2016/08/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 出现了一个小姐姐舔我?

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @ nnnm : 昨天收到一个分享的英文歌曲,很好听的。本来对于英文歌曲一直不多去琢磨,因为英语学得不好啊!但是这看到首歌的歌词后,才明白:...

小小编辑
16分钟前
76
3
编码规范

4.、编码时的一些建议 1、尽量指定类、方法的final修饰符——虚拟机会想办法内联所有的final方法来减少方法执行时创建栈帧的数量,从而降低栈溢出的风险 2、尽量重用对象——重复new对象会增...

呵呵哒灬
今天
2
0
第一个docker化的java应用

Docker 思想 集装箱 标准化:运输方式/存储方式/API 接口 隔离

BeanHo
今天
1
0
移植Modbus到STM32F103(1):coil、discrete、holding和input的取舍

之前自己给设备写的通信协议,一到工作环境就不停通信错误。思前想后,觉得原因是自己瞎写的协议不好,无法适应有噪音的环境,所以决定移植一个成熟的协议。查了资料,发现Modbus协议简单(容...

Konstantine
今天
0
0
Flutter | 状态管理特别篇——Provide

前言 今天偶然发现在谷歌爸爸的仓库下出现了一个叫做flutter-provide的状态管理框架,2月8日才第一次提交,非常新鲜。在简单上手之后感觉就是一个字——爽!所以今天就跟大家分享一下这个新的...

Vadaski
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部