真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

iOS多線程之GCD的基本使用-創(chuàng)新互聯(lián)

  • 使用GCD開發(fā)的基本思路

    成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比寶塔網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式寶塔網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋寶塔地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。

基本思想:將任務(wù)(操作)放在隊(duì)列中去執(zhí)行

     任務(wù)使用block定義

     隊(duì)列負(fù)責(zé)調(diào)度任務(wù)執(zhí)行所在的線程以及具體的執(zhí)行時(shí)間

     隊(duì)列的特點(diǎn)是先進(jìn)先出(FIFO)的,新添加至隊(duì)列的操作都會(huì)排在隊(duì)尾.

     GCD的函數(shù)都是以dispatch開頭的

     注意 :隊(duì)列不是線程,也不對(duì)應(yīng)CPU。

隊(duì)列:dispatch_queue_t

   兩種隊(duì)列:串行隊(duì)列、并行隊(duì)列

隊(duì)列上的操作:添加任務(wù)

   兩種任務(wù):同步任務(wù)、異步任務(wù)

  • 隊(duì)列及任務(wù)

GCD的串行隊(duì)列,意味著隊(duì)列中的任務(wù)排隊(duì)執(zhí)行

1)添加異步任務(wù):創(chuàng)建一個(gè)線程,所有被添加的任務(wù)排隊(duì)執(zhí)行

dispatch_queue_t q = dispatch_queue_create("teacherAn", DISPATCH_QUEUE_SERIAL);
for ( int i=0; i<10; i++) {
    dispatch_async(q, ^{
        NSLog(@"%@ %d", [NSThread currentThread], i);
    });
}

2)添加同步任務(wù):不創(chuàng)建線程,任務(wù)在當(dāng)前線程中執(zhí)行,極少使用

dispatch_queue_t q = dispatch_queue_create("teacherAn", DISPATCH_QUEUE_SERIAL);
dispatch_sync(q, ^{
    NSLog(@"%@ %d", [NSThread currentThread], i);
});

CGD并行隊(duì)列,意味著隊(duì)列中任務(wù)不會(huì)排隊(duì)執(zhí)行,隨機(jī)執(zhí)行

1)添加異步任務(wù):會(huì)創(chuàng)建線程,個(gè)數(shù)不確定,任務(wù)的先后順序不確定

dispatch_queue_t q = dispatch_queue_create("teacherAn", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(q, ^{
    NSLog(@"%@ %d", [NSThread currentThread], i);
});

2)添加同步任務(wù):不會(huì)創(chuàng)建線程,極少使用

dispatch_queue_t q = dispatch_queue_create("teacherAn", DISPATCH_QUEUE_CONCURRENT);
dispatch_sync(q, ^{
    NSLog(@"%@ %d", [NSThread currentThread], i);
});

無論什么隊(duì)列和什么任務(wù),線程的創(chuàng)建和回收都不需要程序員參與,線程的創(chuàng)建和回收是由隊(duì)列負(fù)責(zé)的

  • 全局隊(duì)列

GCD的最常用隊(duì)列是全局隊(duì)列和主隊(duì)列,這兩種隊(duì)列不需要?jiǎng)?chuàng)建,是每個(gè)App都具有的

獲得全局隊(duì)列

dispatch_queue_t dispatch_get_global_queue( long identifier, unsigned long flags);

   flags參數(shù):保留參數(shù),傳0即可

   identifier參數(shù):用于指定使用哪種全局隊(duì)列

四種全局隊(duì)列:

     #define DISPATCH_QUEUE_PRIORITY_HIGH 2         //高優(yōu)先級(jí)

     #define DISPATCH_QUEUE_PRIORITY_DEFAULT 0     //默認(rèn)優(yōu)先級(jí)

     #define DISPATCH_QUEUE_PRIORITY_LOW (-2)     //低優(yōu)先級(jí)

     #define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN //最低的后臺(tái)優(yōu)先級(jí)

全局隊(duì)列是系統(tǒng)的,拿過來直接用即可,都是并行隊(duì)列

   添加異步任務(wù),會(huì)創(chuàng)建多個(gè)線程,任務(wù)無須執(zhí)行

   添加同步任務(wù),不會(huì)創(chuàng)建新線程,任務(wù)排序執(zhí)行

  • 主隊(duì)列

每一個(gè)應(yīng)用程序都只有一個(gè)主線程,在iOS開發(fā)中,所有UI的更新操作,都必須在主線程中去做

獲得主隊(duì)列:

dispatch_queue_t dispatch_get_main_queue(void);

主隊(duì)列也是系統(tǒng)的,拿過來直接用即可,添加的任務(wù)都會(huì)在主線程終止hi性

   添加異步任務(wù):在主線程中順序執(zhí)行,無異步效果

   添加同步任務(wù):任務(wù)不會(huì)執(zhí)行

常見的用法:

   如果一個(gè)任務(wù)想要在后臺(tái)(子線程)執(zhí)行,則使用全局隊(duì)列添加異步任務(wù)

   如果一個(gè)任務(wù)想要在主線程執(zhí)行,則使用主隊(duì)列添加同步任務(wù)

  • 異步下載圖片

這是一類最常見的做法,在子線程中請(qǐng)求數(shù)據(jù),完成后回到主線程中更新相關(guān)的UI元素

    iOS多線程之GCD的基本使用

  • GCD的一些其他常用操作

1)任務(wù)的延遲執(zhí)行

dispatch_after函數(shù)會(huì)延遲將一個(gè)block任務(wù)添加到隊(duì)列中

void dispatch_after( dispatch_time_t when, dispatch_queue_t queue, dispatch_block_t block);

   在Xcode中,通過快捷鍵補(bǔ)全的代碼:

     iOS多線程之GCD的基本使用

   delayInSeconds:延遲的秒數(shù)

   使用的主隊(duì)列,即延遲的任務(wù)在主線程中執(zhí)行

   最后的block,即任務(wù)代碼

2)任務(wù)的多次執(zhí)行

dispatch_apply函數(shù)將一個(gè)任務(wù)放到隊(duì)列中多次執(zhí)行

     具體是串行執(zhí)行還是并行執(zhí)行是由具體的隊(duì)列決定。

     dispatch_apply不會(huì)立刻返回,在執(zhí)行完畢后才返回,是同步的調(diào)用

void dispatch_apply( size_t iterations, dispatch_queue_t queue, void (^block)( size_t));

     iteractions:執(zhí)行的次數(shù)

     queue:隊(duì)列,一般使用全局隊(duì)列

     block:任務(wù)代碼

應(yīng)用場(chǎng)景:將關(guān)系不緊密的循環(huán)操作放到后臺(tái)運(yùn)行

3)保證任務(wù)只執(zhí)行一次

在多線程的環(huán)境下,同故宮dispatch_once()保證一個(gè)任務(wù)只會(huì)執(zhí)行一次

   在Xcode中,通過快捷鍵補(bǔ)全的代碼:

    iOS多線程之GCD的基本使用

   在block中添加任務(wù)代碼即可

應(yīng)用場(chǎng)景:?jiǎn)卫龑?duì)象的創(chuàng)建

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


本文標(biāo)題:iOS多線程之GCD的基本使用-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://weahome.cn/article/pcgpd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部