在开发应用程序时,我们异步请求数据处理后,需要回到主线程刷新UI,一般情况下直接通过以下方式异步回到主线程:
dispatch_async(dispatch_get_main_queue(), ^{
// 主线程刷新UI操作
});
看过SDWebImage源码的应该看过它里面有这样一个宏:
#ifndef dispatch_main_async_safe
#define dispatch_main_async_safe(block)\
if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(dispatch_get_main_queue())) == 0) {\
block();\
} else {\
dispatch_async(dispatch_get_main_queue(), block);\
}
#endif
其中通过如下一句代码来判断当前是否是在主线程
strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(dispatch_get_main_queue())) == 0
上述判断用到了strcmp函数和dispatch_queue_get_label函数
strcmp(字符串1,