To make it easy to use GCD, Apple provides some ways for us to put blocks on the main thread or background thread, or to postpone execution. The example used is as follows:
// 后台执行: dispatch_async(dispatch_get_global_queue(0, 0), ^{ // something }); // 主线程执行: dispatch_async(dispatch_get_main_queue(), ^{ // something }); // 一次性执行: static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ // code to be executed once }); // 延迟2秒执行: double delayInSeconds = 2.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ // code to be executed on the main queue after delay });
Dispatch_queue_t can also be defined by itself, if you want to customize the queue, you can use the Dispatch_queue_create method, the example is as follows:
// 自定义dispatch_queue_t dispatch_queue_t urls_queue = dispatch_queue_create("blog.devtang.com", NULL); dispatch_async(urls_queue, ^{ // your code }); dispatch_release(urls_queue);
In addition, GCD has some advanced usage, such as having two threads in the background executing in parallel, and then summarizing the execution results after two threads have finished. This can be achieved with dispatch_group_t, Dispatch_group_async, Dispatch_group_notify, as shown in the following example:
// 合并汇总结果 dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{ // 并行执行的线程一 }); dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{ // 并行执行的线程二 }); dispatch_group_notify(group, dispatch_get_global_queue(0,0), ^{ // 汇总结果 });
Article from the Tang Qiao "iOS Development Advanced"
Introduction to the dispatch method provided by the system