GCD
GCD是蘋果開發的一個多核程式設計的解決方法,GCD和其他的多執行緒技術方案相比,使用起來更加簡單和方便。
使用GCD
1.block的定義
//申明變數
void (^ loggerBlock)(void);
//定義
loggerBlock = ^{
NSLog(@"Hello");
}
//呼叫
loggerBlock();
2.系統提供的dispatch方法
//後臺執行
dispatch_async(dispatch_get_global_queue(0,0),^{
});
//主執行緒執行
dispatch_async(dispatch_get_main_queue(),^{
});
//一次性執行
static dispatch_once_t oneToken;
dispatch_once(&onceToken,^{
});
//延遲2秒執行
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高階用法,例如讓後臺兩個執行緒並行執行,然後等兩個執行緒都結束後,再彙總結果。
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group,dispatch_get_global_queue(0,0),^{//並行執行的程式一});
dispatch_group_async(group,dispatch_get_global_queue(0,0),^{//並行執行的程式二});
dispatch_group_notify(group,dispatch_get_global_queue(0,0),^{//彙總結果});
3.修改block之外的變數
預設情況下,在程式塊中訪問的外部變數是複製過去的,即寫操作不對原變數生效。但可以加上 __block來讓其生效。
__block int a = 0;
void (^foo)(void) = ^{ a=1; }
foo(); //此時 a的值被修改為1
4.後臺執行
使用block的另一個用處是讓程式在後臺較長久的執行。在以前,當應用被按home鍵退出後,應用最多5秒鐘的時間做一些儲存或清理資源的工作。但是應用可以呼叫UIApplication的beginBackgroundTaskWithExpirationHandler方法,讓應用有10分鐘的時間在後臺執行。這個時間可以用來做清理本地快取、傳送統計資料等工作。
@property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundUpdateTask;
- (void)applicationDidEnterBackground:(UIApplication *)application {
[self beginBackgroundUpdateTask];
//加上需要長久執行的程式碼
[self endBackgroundUpdateTask];
}
- (void)beginBackgroundUpdateTask {
self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[self endBackgroundUpdateTask];
}];
}
- (void)endBackgroundUpdateTask {
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundUpdateTask];
self.backgroundUpdateTask = UIBackgroundTaskInvalid;
}
相關文章
- GCD Inside: GCD 宏GCIDE
- GCD SUMGC
- GCD Inside: GCD 資料結構GCIDE資料結構
- codechef Dynamic GCD [樹鏈剖分 gcd]GC
- 奇怪的GCDGC
- 巧談 GCDGC
- 巧談GCDGC
- GCD那些事GC
- iOS GCD吹水iOSGC
- iOS GCD入門和GCD對CPU多核的使用iOSGC
- gcd思維_cfECR107_B. GCD LengthGC
- GCD 原理詳解GC
- GCD 死鎖原因GC
- USACO GCD Extreme(II)GCREM
- GCD的基本使用GC
- 深入理解 GCDGC
- 【iOS】玩轉 - GCDiOSGC
- iOS GCD詳解iOSGC
- GCD簡單使用GC
- hdu 1695 GCDGC
- 又見GCD hd 2504GC
- GCD 中Group的使用GC
- GCD原始碼原理分析GC原始碼
- GCD(三) dispatch_groupGC
- GCD(四) dispatch_semaphoreGC
- 多執行緒——GCD執行緒GC
- GCD 併發佇列GC佇列
- GCD 學習總結GC
- 最大公約數GCDGC
- GCD執行緒控制GC執行緒
- 深入理解 GCD(二)GC
- BZOJ3853 : GCD ArrayGC
- iOS開發之GCDiOSGC
- 深入理解 GCD(一)GC
- HDU 2504 又見GCDGC
- 學習GCD歷程GC
- G. GCD on a gridGC
- UVA 12716 GCD XOR (數論 gcd和異或不等式)GC