今天身心疲憊啊,這幾天跑的腿都軟了,有上海的朋友嗎?我在找工作,需要一份工作,求看見的同行幫我留意下。非常感謝。我的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