GCD(Grand-Central-Dispatch)是iOS中实现多线程中最经常使用,最好用的一种实现方法,管理起来也比较方便,由于iOS系统已经为咱们作了不少的内部处理。我再用GCD管理多线程问题就显得容易了不少。html
2、GCD是纯C语言的,所以咱们在编写GCD相关代码的时候,面对的函数,而不是方法。在GCD中最经常使用的函数有一下几个:多线程
1.建立队列:async
dispatch_queue_t queue = dispatch_queue_create("com.LD.myQueue",NULL);函数
第一个参数表示队列的名字;spa
第二个参数表示队列的属性,第二个参数传NULL或者DSIPATCH_QUEUE_SERIAL代表要建立一个Serial Dispatch Queue(串行队列), 传入DISPATCH_QUEUE_CONCURRENT 建立一个 Concurrent Dispatch Queue(并行队列)。.net
2.获取主队列:线程
dispatch_queue_t queue = dispatch_get_main_queue();htm
更新程序UI界面要在主队列中执行;blog
3.获取全局队列:队列
dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
全局队列是并行队列;
dispatch_get_global_queue第一个参数是队列的优先级,分别对应四个全局队列:
DISPATCH_QUEUE_PRIORITY_HIGH
DISPATCH_QUEUE_PRIORITY_DEFAULT
DISPATCH_QUEUE_PRIORITY_LOW
DISPATCH_QUEUE_PRIORITY_BACKGROUND
dispatch_get_global_queue中第二个参数目前系统保留,请设置为0便可。
4.获取当前队列:
dispatch_queue_t currentQueue dispatch_get_currentQueue();
若是在队列执行任务中调用,返回执行此任务的队列;若是在主线程中调用,将返回主队列;若是在通常线程(非主线程线程非队列执行任务)中调用,返回DISPATCH_QUEUE_PRIORITY_DEFAULT全局队列。
5.在队列中分配任务:
dispatch_async(queue,^{
// do something
});
GCD 的参考连接:
下面的连接是CSDN中M了个J的一篇博文,写的至关精彩,分析的十分详细,可是博文写的比较早,有一些技术已经发生了改变。例如,dispatch_queue的释放问题,在iOS5一以前的系统中,dispatch_queue是必需要手动释放的,而在iOS6以后苹果的ARC也可以作到dispatch_queue 的自动释放。而博文中依然要手动释放,这点须要注意。