多线程下的NSOperation和NSOperationQueue的使用

NSOperation和NSOperationQueue的介绍:

NSOperation是Cocoa中的一个抽象类,用来封装单个任务和代码执行一项操作,由于是抽象类,所以不能直接实例化使用,必须定义子类继承该抽象类来实现,比较常用的NSOperation的子类有NSInvocationOperation,另外,也可以自己继承NSOperation来实现线程的操作。

NSOperationQueue,它相当于一个线程队列或者可以叫做线程池。可以顺序执行队列中的操作,也可以设置队列中操作的优先级。

将上述这两个类配合起来使用,就可以实现多线程编程了。

NSOperation的使用:

NSOperation的两个子类的设置事件的方法:
NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(selector:) object:nil];

NSBlockOperation *blockOperation = [[NSBlockOperation alloc] init];
[blockOperation addExecutionBlock:^{
NSLog(@"1st the thread is %@", [NSThread currentThread]);
}]; [operation1 start];

第一个是使用NSInvocationOperation来设置事件。

第二个是使用NSBlockOperation来设置事件,事件在代码开中设置。

第三个是单独开启某个NSOperation子类的事件的方法。

NSOperationQueue的使用:

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

 [queue addOperation:operation1];

 [operation1 addDependency:operation2];<span style="white-space:pre">	</span>
<span style="color: rgb(52, 52, 52); font-family: 'Source Code Pro', monospace; font-size: 16.2000007629395px; white-space: pre-wrap;">[NSOperationQueue mainQueue]</span>

第一个方法:创建和初始化队列

第二个方法: 添加事件,如果事件添加了,那么程序就直接运行了

第三个方法:事件的先后顺序设置

第四个方法:获取主队列

使用上述方法实例

@implementation NSOperationController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.view setBackgroundColor:[UIColor whiteColor]]; // [self invocationOperation1];
} #pragma mark detail method
-(void) invocationOperation1{
// 使用NSInvocationOperation类来设置事件
NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(logTheOperation:) object:@"this is the frist invovationOpration"];
NSInvocationOperation *operation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(logTheOperation:) object:@"this is the second invocationOperation"]; // 使用NSBlockOperation来设置事件,并且添加事件
NSBlockOperation *blockOperation = [[NSBlockOperation alloc] init];
[blockOperation addExecutionBlock:^{
NSLog(@"1st the thread is %@", [NSThread currentThread]);
}];
[blockOperation addExecutionBlock:^{
NSLog(@"2st the thread is %@", [NSThread currentThread]);
}];
[blockOperation addExecutionBlock:^{
NSLog(@"3st the thread is %@", [NSThread currentThread]);
}]; // 在这里我们还可以设置事件的先后顺序,这样一设置,运行顺序应该是blockOperation->operation1->operation2
[operation1 addDependency:operation2];
[blockOperation addDependency:operation2]; // 初始化一个队列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
// 将事件添加到队列中
[queue addOperation:operation1];
[queue addOperation:operation2];
[queue addOperation:blockOperation]; // 用另一种方法来存放事件
// [operation1 start];
// [operation2 start];
// [blockOperation start]; } -(void) logTheOperation:(NSString *)log
{
NSLog(@"%@the thread is %@",log, [NSThread currentThread]);
}
@end


多线程下的NSOperation和NSOperationQueue的使用的更多相关文章

  1. [转] iOS多线程编程之NSOperation和NSOperationQueue的使用

    <iOS多线程编程之NSThread的使用> 介绍三种多线程编程和NSThread的使用,这篇介绍NSOperation的使用. 使用 NSOperation的方式有两种, 一种是用定义好 ...

  2. iOS多线程编程之NSOperation和NSOperationQueue的使用

    前一篇 <iOS多线程编程之NSThread的使用> 介绍三种多线程编程和NSThread的使用,这篇介绍NSOperation的使用. 使用 NSOperation的方式有两种, 一种是 ...

  3. iOS多线程编程之NSOperation和NSOperationQueue的使用(转自容芳志专栏)

    转自由http://blog.csdn.net/totogo2010/ 使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBl ...

  4. AJ学IOS(53)多线程网络之NSOperation简介

    AJ分享,必须精品 一:简单介绍 1:NSOperation的作⽤使用步骤: 配合使用NSOperation和NSOperationQueue也能实现多线程编程. NSOperation和NSOper ...

  5. iOS 多线程学习笔记 —— NSOperation

    本文复制.参考自文章:iOS多线程编程之NSOperation和NSOperationQueue的使用 ,主要为了加强个人对知识的理解和记忆,不做他用.原作者声明: 著作权声明:本文由http://b ...

  6. 多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用

    本篇文章主要介绍下多线程下NSOperation.NSBlockOperation.NSInvocationOperation.NSOperationQueue的使用,列举几个简单的例子. 默认情况下 ...

  7. 【iOS开发】多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用

    http://blog.csdn.net/crycheng/article/details/21799611 本篇文章主要介绍下多线程下NSOperation.NSBlockOperation.NSI ...

  8. 4.4 多线程进阶篇<下>(NSOperation)

    本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人"简书" 本文源码 Demo 详见 Github https://github.c ...

  9. 用NSOperation和NSOperationQueue实现多线程编程

    1.上一讲简单介绍了NSThread的使用,虽然也可以实现多线程编程,但是需要我们去管理线程的生命周期,还要考虑线程同步.加锁问题,造成一些性能上的开销.我们也可以配合使用NSOperation和NS ...

随机推荐

  1. splice从数组中删除指定定数据

    /*从数组中删除指定定数据var somearray = ["mon", "tue", "wed", "thur"]so ...

  2. 将listBox中信息显示在dataGridview中,操作datagridview后删除listBox信息和SQL数据库信息 续(浅谈listBox..)

    应用场景      对datagridview控件使用了解,以及操作datagridview选中的信息删除,并且有二次确认后才删除用户信息.相应的删除listbox中用户信息,下面一起看看需要哪些准备 ...

  3. js 表达式与运算符 详解(下)

    比较运算符: > .>= .<. <=.  ==. !=. ===. !==. 比较运算符的结果都为布尔值 ==只比较值是否相等    而    ===比较的是值和数据类型都要 ...

  4. access_token的获取方式

      获取Access Token $appid = ""; $appsecret = ""; $url = "https://api.weixin.q ...

  5. 关于asp.net core部署到iis中出现 HTTP Error 502.5 - Process Failure的问题

    环境是windows Server2008R2 出现这个问题搞了一下午都没解决,最后又加班才算搞定,由于英文不太好,官方的文档看了好几遍,也按照文档做的,但还是出现这个问题,百度google搜了很多解 ...

  6. 利用Xilinx中的ROM构造查找表来计算sin和cos的方法探讨

    1.使用matlab制作.coe文件 查找表的构造 构造256点的正余弦表 exp(-j*2*pi*(0:255)/256),分别得到 cos和sin的查找表 matlab代码: 求sin fid = ...

  7. 在VS2008.Net下使用WPF开发Web应用程序

    原文地址:http://hankjin.blog.163.com/blog/static/33731937200922353623434/ 胖客户端的好处是可以轻易的实现绚丽的效果, 而瘦客户端则需要 ...

  8. hadoop输出统计

  9. 蓝牙4.0BLE cc2540 usb-dongle的 SmartRF Packet Sniffer 抓取数据方法

    蓝牙4.0的开发, 现在真热火的很, 但是很多朋友买了我们出品的cc2540 usb-dongle后, 都反馈说不知道如何抓包, 并且, 即使很多朋友到TI官网论坛去找信息,不少朋友依然是无功而返,实 ...

  10. 利用Java反射机制完成XML到对象的解析

    对于一些小批量的数据,如果采用数据库来存取的话,未免有点大题小作,使用XML文件是个不错的方法,尤其是在一些Web应用中,经常需要缓存一部分数据,如果将这些数据形成XML文件,解析后放入一个Hasht ...