dispatch_main_async_safe 解释

之前没注意这块,今天好奇点进来看看,个人理解了一下.

//这里的判断是否在主线程,之前用的NSThread的isMainThread.但是并不是所有在主线程执行的任务,都是主队列的任务,会导致某些需要主队列运行的库产生问题.VectorKit.
//dispatch_queue_get_label 返回创建队列时为队列指定的标签。主队列标签为: com.apple.main-thread
//如果在主线程内调用dispatch_async(dispatch_get_main_queue(), block),可能会导致block在下一次runloop执行,从而导致更新UI时出错,而且还浪费资源.
//所以如果在主线成,直接执行了.不在才回归.
#ifndef dispatch_main_async_safe    //#if not define 
#define dispatch_main_async_safe(block)\
    if (dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL) == dispatch_queue_get_label(dispatch_get_main_queue())) {\
        block();\
    } else {\
        dispatch_async(dispatch_get_main_queue(), block);\
    }
#endif

你可能感兴趣的:(dispatch_main_async_safe 解释)