NSThread、NSOperation、GCD的使用

整理一下這段時(shí)間對(duì)多線程的認(rèn)識(shí),不足的地方還望指出。

先說一下NSThread、GCD、NSOperation的區(qū)別。
NSThread

優(yōu)點(diǎn):比其他的兩個(gè)更輕量級(jí)。
缺點(diǎn):需要自己管理線程的生命周期,線程同步。線程同步對(duì)數(shù)據(jù)的加鎖會(huì)有一定的系統(tǒng)開銷。
使用:大部分時(shí)間用來程序員做測(cè)試。使用可參考

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

優(yōu)點(diǎn):是 Apple 開發(fā)的一個(gè)多核編程的解決方法,簡(jiǎn)單易用,效率高,速度快,基于C語言,更底層更高效,并且不是Cocoa框架的一部分,自動(dòng)管理線程生命周期。
缺點(diǎn):使用GCD的場(chǎng)景如果很復(fù)雜,就有非常大的可能遇到死鎖問題。
使用:iOS多線程--徹底學(xué)會(huì)多線程之『GCD』

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

優(yōu)點(diǎn):NSOperation是OC中多線程技術(shù)的一種,是對(duì)GCD的OC包裝,可設(shè)置NSOperation的依賴關(guān)系,NSOperation可以設(shè)置自身的優(yōu)先級(jí),NSOperation是一個(gè)抽象類實(shí)際開發(fā)中常用的兩個(gè)類是NSInvocationOperation和NSBlockOperation,同樣我們可以自定義NSOperation等。
缺點(diǎn):直接使用GCD效率確實(shí)會(huì)更高效,NSOperation會(huì)多一點(diǎn)開銷。
使用:可參考認(rèn)識(shí)和使用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];
    
    //創(chuàng)建NSOperationQueue
    NSOperationQueue * queue=[[NSOperationQueue alloc]init];
    //把操作添加到隊(duì)列中
    [queue addOperation:operation_1];
    [queue addOperation:operation_2];
    [queue addOperation:operation_3];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容