#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
dispatch_queue_get_label用来取队列的名字,进而判断如果当前已经是主队列,那么直接执行,否则回调到主队列之后再执行。
如果当前队列已经是主队列了,那么在调用dispatch_async(dispatch_get_main_queue(), block)有可能会出现crash。
网友评论