判断是否当前队列

今天在看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,则返回零; 若str1str2,则返回正数。 【参数】s1, s2 为需要比较的两个字符串。 【注意】:strcmp() 以二进制的方式进行比较,不会考虑多字节或宽字节字符;如果考虑到本地化的需求,请使用 [strcoll()](http://c.biancheng.net/cpp/html/163.html) 函数。 */

  • DISPATCH_CURRENT_QUEUE_LABEL 结合方法dispatch_queue_get_label 使用,将会得到当前队列标签名

通过此方式能判断,当前是否处于指定的队列中。

你可能感兴趣的:(判断是否当前队列)