簡(jiǎn)述
GCD (Grand Central Dispatch) ,是蘋果開發(fā)的多核編程的解決方案,GCD和其他多線程方案比較起來,使用更簡(jiǎn)單方便。
使用
后臺(tái)執(zhí)行
dispatch_async(dispatch_get_global_queue(0, 0), ^{
});
主線程執(zhí)行
dispatch_async(dispatch_get_main_queue(), ^{
});
一次性執(zhí)行
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
});
延遲執(zhí)行
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
});
自定義queue
dispatch_queue_t queue = dispatch_queue_create("com.queue.tt", NULL);
dispatch_async(queue, ^{
});
dispatch_release(queue);
高級(jí)用法
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
// task 1
});
dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
// task 2
});
dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{
//任務(wù)執(zhí)行完成
});
后臺(tái)運(yùn)行
@property (assign, nonatomic) UIBackgroundTaskIdentifier ide;
- (void)beginBackTask
{
self.ide = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
}];
}
- (void)endBackTask
{
[[UIApplication sharedApplication] endBackgroundTask:self.ide];
self.ide = UIBackgroundTaskInvalid;
}
總結(jié)
總體來說GCD能夠極大地方便開發(fā)者進(jìn)行多線程編程