今天在看SDWebImage时,发现一个宏dispatch_queue_async_safe
dispatch_queue_async_safe(queue, block)\
if (dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL) == dispatch_queue_get_label(queue)) {\
block();\
} else {\
dispatch_async(queue, block);\
}
dispatch_queue_get_label(dispatch_queue_t queue):返回队列的标签名,标签名在队列创建的时候会指定,如果创建时没有提供,此接口返回NULL。
strcmp(const char *s1, const char *s2) /** Explain: strcmp() 用来比较字符串(区分大小写)。 其原型为: int strcmp(const char *s1, const char *s2); 【返回值】: 若str1==str2,则返回零; 若str1<str2,则返回负数; 若str1>str2,则返回正数。 【参数】s1, s2 为需要比较的两个字符串。 【注意】:strcmp() 以二进制的方式进行比较,不会考虑多字节或宽字节字符;如果考虑到本地化的需求,请使用 [strcoll()](http://c.biancheng.net/cpp/html/163.html) 函数。 */
DISPATCH_CURRENT_QUEUE_LABEL 结合方法dispatch_queue_get_label 使用,将会得到当前队列标签名
通过此方式能判断,当前是否处于指定的队列中。