iOS高级面试GCD初探

###GCD
概念:全称 Grand Central Dispatch
纯C语言,多线程解决方案
优势:
1.是多核并行运算提出的解决方案
2.会自动利用更多CPU内核
3.会自动管理线程生命周期 (如何管理的?创建线程、调度任务、销毁线程)

GCD的常见使用方法:
同步方法

dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);

异步方法

dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

用来执行异步的函数(在前面的任务执行结束后才会执行,它后面的任务会等它执行完成后才执行)

dispatch_barrier_async(dispatch_queue_t queue, dispatch_block_t block);

两大类型
1.并行队列
2.串行队列

//从子线程回到主线程
dispatch_async(
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // 执行耗时的异步操作...
      dispatch_async(dispatch_get_main_queue(), ^{
        // 回到主线程,执行UI刷新操作
        });
});
static dispacth_once_t onecToken;
dispatch_once(&onceToken,^{
	//只执行一次的代码(这里面默认是线程安全的)
});

方法二:
队列组!!
代码

dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // 执行1个耗时的异步操作
});
dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // 执行1个耗时的异步操作
});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
    // 等前面的异步操作都执行完毕后,回到主线程...
});

拓展

作者:薛定諤 《13 个 GCD 应用场景》

你可能感兴趣的:(面试总结)