SDWebImage中dispatch_queue_async_safe宏的作用

在阅读SDWebImage时,发现以下宏定义。

#ifndef dispatch_queue_async_safe
#define dispatch_queue_async_safe(queue, block)\
// 判断是否在主队列执行
    if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(queue)) == 0) {\
    // 主队列
        block();\
    } else {\
    // 其他线程
        dispatch_async(queue, block);\
    }
#endif

#ifndef dispatch_main_async_safe

#define dispatch_main_async_safe(block) 
dispatch_queue_async_safe(dispatch_get_main_queue(), block)

#endif

使用方法:

dispatch_main_asyn_safe(^{
	// 需要在主线程执行的代码
})
  • strcmp(s1, s2)比较字符串大小,s1 == s2,返回0;s1 > s2, 返回正数;s1 < s2, 返回负数。
  • dispatch_queue_get_label获取队列表示。

你可能感兴趣的:(iOS,多线程,SDWebImage,宏)