在阅读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
获取队列表示。