美文网首页
dispatch_main_async_safe 解释

dispatch_main_async_safe 解释

作者: 客三消 | 来源:发表于2020-03-06 22:53 被阅读0次

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

    //这里的判断是否在主线程,之前用的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 解释

          本文链接:https://www.haomeiwen.com/subject/xfiarhtx.html