iosNSOperation的簡單用法

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

發佈了46 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章