1、给GCD分派任务
c函数代替block,库定义:
typedef void (*dispatch_function_t)(void *);
案例:
void firstIteration(void *paramContext);
void secondIteration(void *paramContext);
void thirdIteration(void *paramContext);
2、GCD 执行UI相关任务
方案:使用dispatch_get_main_queue函数,利用异步来分派任务
案例:
dispatch_queue_t mainQueue = dispatch_get_main_queue();
dispatch_async(mainQueue, ^(void) {
NSLog(@"Current thread = %@", [NSThread currentThread]);
NSLog(@"Main thread = %@", [NSThread mainThread]);
});
备注:利用
dispatch_get_main_queue获取主队列
3、GCD 同步执行非UI相关任务
方案:使用dispatch_sync函数或者dispatch_sync_f函数
dispatch_sync:block object
dispatch_sync_f:C函数
blcok案例:
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_sync(concurrentQueue, printFrom1To1000);
C函数案例:
dispatch_queue_t concurrentQueue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_sync_f(concurrentQueue,
NULL,
printFrom1To1000);
备注:dispatch_get_global_queue函数的第一个参数表明并发队列的优先级,代码中都是默认系统的优先级;第二个参数是预留,只要固定为0就OK
。
4、GCD 异步执行非UI相关任务
方案:使用dispatch_async函数或者dispatch_async_f函数
dispatch_async:block object
dispatch_async_f:C函数
案例:
dispatch_queue_t concurrentQueue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(concurrentQueue, ^{
});