今天身心疲惫啊,这几天跑的腿都软了,有上海的朋友吗?我在找工作,需要一份工作,求看见的同行帮我留意下。非常感谢。我的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
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!