SDWebImage扩展笔记(一)

SDWebImage中使用GCD主线程队列

GCD 如何安全获取主线程队列

获取主线程是 dispatch_get_main_queue()
刷新UI时需要在主线程刷新,所以处理完数据之后,都会调用主线程刷新界面
但有时却会因为 dispatch_get_main_queue()这个串行队列造成界面卡死,
详情请参见Hardy_Hu的GCD--dispatch_get_main_queue()卡死

为了避免重复卡死, SDWebImage提供了一个宏来调用主线程dispatch_main_async_safe

#define dispatch_main_async_safe(block)\
if (dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL) == dispatch_queue_get_label(dispatch_get_main_queue())) {\
block();\
} else {\
dispatch_async(dispatch_get_main_queue(), block);\
}

该宏 首先判断当前队列是否为主线程队列,如果是则直接使用block块,如果不是则使用主线程队列异步执行block

你可能感兴趣的:(SDWebImage扩展笔记(一))