// main thread excute
static inline void onMainThreadAsync(void (^block)()) {
if ([NSThread isMainThread]) block();
else dispatch_async(dispatch_get_main_queue(), block);
}
_renderQueue = dispatch_queue_create("com.olinone.danmaku.renderQueue", DISPATCH_QUEUE_SERIAL);
// set target queue, 将 _renderQueue 与 global queue 关联起来,将 _renderQueue接收到的block,分发到 global 中去, 真正执行的是 global queue
dispatch_set_target_queue(_renderQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0));
dispatch_set_target_queue
可以减少线程的创建,使用 target_queue 关联的 thread,执行任务.
保证主队列执行,可以封装成 inline 函数.
网友评论