GCD

GCD是蘋果開發(fā)的一個(gè)多核編程的解決方法,GCD和其他的多線程技術(shù)方案相比,使用起來更加簡(jiǎn)單和方便。

使用GCD

1.block的定義

//申明變量?

void (^ loggerBlock)(void);

//定義

loggerBlock = ^{

NSLog(@"Hello");

}

//調(diào)用

loggerBlock();

2.系統(tǒng)提供的dispatch方法

//后臺(tái)執(zhí)行

dispatch_async(dispatch_get_global_queue(0,0),^{

});

//主線程執(zhí)行

dispatch_async(dispatch_get_main_queue(),^{

});

//一次性執(zhí)行

static dispatch_once_t ?oneToken;

dispatch_once(&onceToken,^{

});

//延遲2秒執(zhí)行

double delayInSeconds = 2.0;

dispatch_time_ t popTime = dispatch_time(DISPATCH_TIME_NOW,delayInSeconds*NSEC_PER_SEC);

dispatch_after(popTime,dispatch_get_main_queue(),^(void){

});


GCD高級(jí)用法,例如讓后臺(tái)兩個(gè)線程并行執(zhí)行,然后等兩個(gè)線程都結(jié)束后,再匯總結(jié)果。

dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group,dispatch_get_global_queue(0,0),^{//并行執(zhí)行的程序一});

dispatch_group_async(group,dispatch_get_global_queue(0,0),^{//并行執(zhí)行的程序二});

dispatch_group_notify(group,dispatch_get_global_queue(0,0),^{//匯總結(jié)果});

3.修改block之外的變量

默認(rèn)情況下,在程序塊中訪問的外部變量是復(fù)制過去的,即寫操作不對(duì)原變量生效。但可以加上 ? __block來讓其生效。

__block int a = 0;

void (^foo)(void) = ^{ a=1; }

foo(); //此時(shí) a的值被修改為1

4.后臺(tái)運(yùn)行

使用block的另一個(gè)用處是讓程序在后臺(tái)較長(zhǎng)久的運(yùn)行。在以前,當(dāng)應(yīng)用被按home鍵退出后,應(yīng)用最多5秒鐘的時(shí)間做一些保存或清理資源的工作。但是應(yīng)用可以調(diào)用UIApplication的beginBackgroundTaskWithExpirationHandler方法,讓應(yīng)用有10分鐘的時(shí)間在后臺(tái)運(yùn)行。這個(gè)時(shí)間可以用來做清理本地緩存、發(fā)送統(tǒng)計(jì)數(shù)據(jù)等工作。

@property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundUpdateTask;

- (void)applicationDidEnterBackground:(UIApplication *)application {

[self beginBackgroundUpdateTask];

//加上需要長(zhǎng)久執(zhí)行的代碼

[self endBackgroundUpdateTask];

}

- (void)beginBackgroundUpdateTask {

self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{

[self endBackgroundUpdateTask];

}];

}

- (void)endBackgroundUpdateTask {

[[UIApplication sharedApplication] endBackgroundTask:self.backgroundUpdateTask];

self.backgroundUpdateTask = UIBackgroundTaskInvalid;

}

最后編輯于
?著作權(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)容

  • 我們知道在iOS開發(fā)中,一共有四種多線程技術(shù):pthread,NSThread,GCD,NSOperation: ...
    請(qǐng)叫我周小帥閱讀 1,563評(píng)論 0 1
  • 1. GCD簡(jiǎn)介 什么是GCD呢?我們先來看看百度百科的解釋簡(jiǎn)單了解下概念 引自百度百科:Grand Centra...
    千尋_544f閱讀 522評(píng)論 0 0
  • 白鴿子隔了三天才又去“長(zhǎng)夢(mèng)”。 那三天里,她把從小到大所有的不滿統(tǒng)統(tǒng)寫到了白紙上。 ——滿滿的十大頁白紙! 多的令...
    南國(guó)小鴿子閱讀 356評(píng)論 0 0
  • 誰能料到,珠海人會(huì)意想天開般地沿海填出了一條幾十公里的大道,種上南國(guó)的樹木與花草,又樹起著一個(gè)又一個(gè)充滿著現(xiàn)代情致...
    孔孟之鄉(xiāng)閱讀 781評(píng)論 0 1
  • 我沒有文采,沒有天賦。能寫出來一些東西,只是自己所思所想。 沒有思路的時(shí)候,大概都是在經(jīng)歷無法訴說的事情吧。 今年...
    水若善上金水閱讀 214評(píng)論 0 0

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