NSThread、NSOperation、GCD的使用

整理一下這段時間對多線程的認識,不足的地方還望指出。

先說一下NSThread、GCD、NSOperation的區別。
NSThread

優點:比其他的兩個更輕量級。
缺點:需要自己管理線程的生命周期,線程同步。線程同步對數據的加鎖會有一定的系統開銷。
使用:大部分時間用來程序員做測試。使用可參考

NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(task) object:nil];
    [thread start];
- (void)task
{
    NSLog(@"__%@",[NSThread currentThread]);
}
GCD

優點:是 Apple 開發的一個多核編程的解決方法,簡單易用,效率高,速度快,基于C語言,更底層更高效,并且不是Cocoa框架的一部分,自動管理線程生命周期。
缺點:使用GCD的場景如果很復雜,就有非常大的可能遇到死鎖問題。
使用:iOS多線程--徹底學會多線程之『GCD』

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       NSLog(@"__%@",[NSThread currentThread]);
    });
NSOperation

優點:NSOperation是OC中多線程技術的一種,是對GCD的OC包裝,可設置NSOperation的依賴關系,NSOperation可以設置自身的優先級,NSOperation是一個抽象類實際開發中常用的兩個類是NSInvocationOperation和NSBlockOperation,同樣我們可以自定義NSOperation等。
缺點:直接使用GCD效率確實會更高效,NSOperation會多一點開銷。
使用:可參考認識和使用NSOperation

    NSBlockOperation *operation_1 = [NSBlockOperation blockOperationWithBlock:^{
        for (int i = 0; i< 100; i++) {
            NSLog(@"________1111");
        }
    }];
    NSBlockOperation *operation_2 = [NSBlockOperation blockOperationWithBlock:^{
        for (int i = 0; i< 100; i++) {
            NSLog(@"________2222");
        }
    }];
    NSBlockOperation *operation_3 = [NSBlockOperation blockOperationWithBlock:^{
        for (int i = 0; i< 100; i++) {
            NSLog(@"________3333");
        }
    }];
    
    //添加依賴
    [operation_3 addDependency:operation_1];
    [operation_3 addDependency:operation_2];
    
    //創建NSOperationQueue
    NSOperationQueue * queue=[[NSOperationQueue alloc]init];
    //把操作添加到隊列中
    [queue addOperation:operation_1];
    [queue addOperation:operation_2];
    [queue addOperation:operation_3];
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Object C中創建線程的方法是什么?如果在主線程中執行代碼,方法是什么?如果想延時執行代碼、方法又是什么? 1...
    AlanGe閱讀 1,777評論 0 17
  • 前言 Pthread,NSThread,GCD和NSOperation是iOS中多線程的四種實現方案。 一.進程和...
    小李龍彪閱讀 674評論 1 4
  • 單例模式例子: https://github.com/XiaoRuiZuo/Singleton 多線程:多線程是為...
    Lee堅武閱讀 1,420評論 0 50
  • 嚴格意義上來說,我算是一個很多球迷眼里的偽球迷,喜歡的球隊只有三只:皇馬,曼聯,葡萄牙。但 足球是平等的不對嗎?...
    Curiousss閱讀 708評論 1 5
  • 你認為自己是一個貧窮的人嗎?如果是,你是否想過改變自己的現狀,從現在起積累自己的財富,邁向富人的行列?讀讀以下的這...
    做自己的CEO閱讀 432評論 0 3