第二种获取Dispatch Queue的方法就是用系统标准提供的Dispatch Queue。
1、Main Dispatch Queue:
是在主线程中执行的Dispatch Queue。因为主线程只有一个,所以它是Serial Dispatch Queue。追加到Main Dispatch Queue的处理在主线程的RunLoop中执行。
2、Global Dispatch Queue:
是所有应用程序都能够使用的Concurrent Dispatch Queue。
有四个执行优先级,高优先级(High Priority)、默认优先级(Default Priority)、低优先级(Low Priority)和后台优先级(Background Priority)。
XNU内核管理的用于Global Dispatch Queue的线程,将各自使用的Global Dispatch Queue的执行优先级作为线程的执行优先级使用。
向Global Dispatch Queue中追加处理时,要选择与处理内容对应的执行优先级的Global Dispatch Queue。
获取Dispatch Queue的例子
// 获取Main Dispatch Queue
dispatch_queue_t mainDispatchQueue = dispatch_get_main_queue();
// 获取高优先级的Global Dispatch Queue
dispatch_queue_t globalDispatchQueueHigh = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
// 获取默认优先级的Global Dispatch Queue
dispatch_queue_t globalDispatchQueueDefault = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// 获取低优先级的Global Dispatch Queue
dispatch_queue_t globalDispatchQueueLow = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
// 获取后台优先级的Global Dispatch Queue
dispatch_queue_t globalDispatchQueueBackground = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
// dispatch_get_global_queue函数的第二个参数?标志?
内存管理方面:
Main Dispatch Queue、Global Dispatch Queue执行dispatch_retain函数和dispatch_release函数不会引起任何变化,也不会引起任何问题。
原因为什么??
使用例子:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 可并行执行的处理
dispatch_async(dispatch_get_main_queue(), ^{
// 只能在主线程中执行的处理
});
});
网友评论