标签:
1、NSOperationQueue有两种不同类型的队列:主队列和自定义队列
a、主队列运行在主线程上
b、自定义队列在后台运行
2、操作步骤
a、定义操作队列
b、定义操作
c、将操作添加到队列中(一旦将操作添加到队列中,操作就会立即被调度执行)
3、例子
// 0、定义队列
self.myQueue = [[NSOperationQueue alloc] init];
// 1、定义操作
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
[self operationAction:@"Block Operation"];
}];
// 2、将操作添加到队列
[self.myQueue addOperation:op];
4、顺序执行,要设置依赖
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"下载图片 %@", [NSThread currentThread]);
}];
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"修饰图片 %@", [NSThread currentThread]);
}];
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"保存图片 %@", [NSThread currentThread]);
}];
NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"更新UI %@", [NSThread currentThread]);
}];
// 设定执行顺序, Dependency依赖,可能会开多个,但不会太多
// 依赖关系是可以跨队列的!
[op2 addDependency:op1];
[op3 addDependency:op2];
[op4 addDependency:op3];
// 把操作添加到队列中
[self.myQueue addOperation:op1];
[self.myQueue addOperation:op2];
[self.myQueue addOperation:op3];
// 所有UI的更新需要在主线程上进行
[[NSOperationQueue mainQueue] addOperation:op4];
5、设置最大线程的数量
[self.myQueue setMaxConcurrentOperationCount:1];
// 新建线程是有开销的
// 在设定同时并发的最大线程数时,如果前一个线程工作完成,但是还没有销毁,会新建线程
// 应用场景:网络开发中,下载工作!(线程开销:CPU,MEM)电量!
// 如果是3G,开3个子线程
// 如果是WIFI,开6个子线程
多线程-NSOperation
标签:
原文地址:http://www.cnblogs.com/jianghong/p/4700528.html