摘抄自SDWebImage
#ifndef dispatch_queue_async_safe
#define 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);\
}
#endif
#ifndef dispatch_main_async_safe
#define dispatch_main_async_safe(block) dispatch_queue_async_safe(dispatch_get_main_queue(), block)
#endif
使用
wmsDispatch_main_async_safe(^{
// ...
});
dispatch_queue_async_safe(dispatch_get_global_queue(0, 0), ^{
//...
});
定义了dispatch_main_async_safe和dispatch_queue_async_safe。