今天身心疲惫啊,这几天跑的腿都软了,有上海的朋友吗?我在找工作,需要一份工作,求看见的同行帮我留意下。非常感谢。我的qq就是820203420.同时也希望能够继续给大家带来更好的文章,有时间我会开源一个项目,希望大家留意,或者可以联系我,我们一起开源。晚安。
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
#if 0
// NSOperation / NSOperationQueue 是基于GCD封装的面向对象的多线程类 GCD是纯c语言 GCD相对来说高效些
//NSOperation / NSOperationQueue 开发步骤
// 1. 创建NSOperation对象,该对象中封装任务。
// 2. 创建NSOperationQueue操作队列,将NSOperation对象扔入到操作队列中。
// 3. 将操作加入到操作队列后,系统会自动的将队列中的操作拿出来放到线程上执行。
//NSOperation 是一个抽象类(不能实例化对象的类)。他有两个子类
// NSInvocationOperation
// NSBlockOperation
// 创建操作对象时,必须使用这些子类来实例化
// NSOperationQueue 操作队列只有两种,
// 1. 自定义操作队列,通过alloc init创建的。这个队列的任务在子线程中并发执行。
// 2. 主队列 和GCD的主队列相似, 添加到主队列中得任务,都会在主线程中执行。
// [NSOperationQueue mainQueue]; 获取主队列的方式
//创建操作对象,该对象中封装任务。
NSInvocationOperation *invOperation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test) object:nil];
//执行操作中得任务。 默认情况下在主线程中执行
[invOperation start];
// 创建操作,任务保存在block中
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"blockOperation thread = %@",[NSThread currentThread]);
}];
for (int i = 0; i<10; i++) {
[blockOperation addExecutionBlock:^{
NSLog(@"blockOperation %d thread = %@",i,[NSThread currentThread]);
}];
}
//执行操作中得任务。 默认情况下在主线程中执行,如果blockOperation中的任务个数大于1,其他的任务在子线程中执行
[blockOperation start];
#else
// ---------- 实际使用 ------------------
// 1. 创建操作对象
NSInvocationOperation *invocationOp = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test) object:nil];
NSBlockOperation *blockOp = [NSBlockOperation blockOperationWithBlock:^{
for (int i = 0; i<5; i++) {
NSLog(@"blockOp thread = %@",[NSThread currentThread]);
}
}];
// 2. 将操作对象加入操作队列中, 添加到队列中的任务,会自动在子线程中执行。
// 创建操作队列
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[queue addOperation:invocationOp];
[queue addOperation:blockOp];
for (int i = 0; i<5; i++) {
NSBlockOperation *bOp = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"blockOp i = %d thread = %@",i,[NSThread currentThread]);
}];
//添加到主队列中得任务,都在主线程中按顺序执行。
// [[NSOperationQueue mainQueue] addOperation:bOP];
}
#endif
}
-(void)test
{
for (int i = 0; i<5; i++) {
NSLog(@"InvocationOperation thread = %@",[NSThread currentThread]);
}
}
@end
原文地址:http://blog.csdn.net/wq820203420/article/details/45049451