这次来介绍下苹果主推的多线程使用方式,GCD。GCD全称是Grand Central Dispatch。该多线程机制性能很好。GCD声明了一系列dispatch开头的方法来实现多线程操作,dispatch方法中提供了一个Block回调来处理线程的任务。
先来看一个实例:
- (void)function
{
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
[self loop];
});
}
- (void)loop
{
xxxxx.....//线程任务
}
我们一句一句来解释上面的程序。首先说dispatch_get_global_queue,这是一个获取线程调度队列的方法,返回类型是dispatch_queue_t。用GCD产生的线程要放在队列里调度执行。在GCD中有三个调度队列:
- Main queue,在main queue中定义的任务在主线程中执行,一般是和UI相关的操作,比如更新界面。获取该队列的方法是dispatch_get_main_queue。
- Concurrent queue ,在concurrent queue中定义的任务在用户线程中执行,一般是后台执行时间较长的任务,比如下载。获取该队列的方法是dispatch_get_global_queue。
- Serial queue,在serial queue中定义的任务是顺序执行的,即先进先出(FIFO)。获取该队列的方法是dispatch_queue_create,使用该队列需要显示调用dispatch_release方法在线程结束时释放队列。
上面三种获取队列的方法中,第一个参数表示队列的优先级,一般为Default,第二个参数是个flag,一般情况为0。dispatch_async是异步线程方法(在异步线程执行的过程中不影响主线程,也就是UI还是能响应的,不同于同步方式,会让UI界面卡住,直到同步线程结束),第一个参数是获取到的队列,第二个参数就是线程的回调函数(Block),在block中添加线程的代码。
先介绍这么多,今后理解更深入再来补充