在常用的SDWebImageDownloaderOperation類文件中我夢(mèng)會(huì)看到dispatch_barrier_async(self.barrierQueue, ^{
[self.callbackBlocksaddObject:callbacks];
});對(duì)dispatch_barrier_async氯哮。那么我們?nèi)绾卫斫鈊ispatch_barrier_async通過(guò)下面這段代碼的log時(shí)間可以很清晰的看到哭廉。
可以看到patch_barrier_async 效果類似 dispatch_async晌缘,區(qū)別就是中間多了一個(gè)barrier,barrier顧名思義就是屏障的意思,將隊(duì)列一分為2笛厦,前面的代碼執(zhí)行完才能執(zhí)行dispatch_barrier_async中的任務(wù)诱桂,最后執(zhí)行隊(duì)列后的任務(wù)渠缕。
可以看到patch_barrier_sync 效果類似 patch_barrier_async万伤,都是將隊(duì)列一分為2趋距,前面的代碼執(zhí)行完才能執(zhí)行dispatch_barrier_sync中的任務(wù),最后執(zhí)行隊(duì)列后的任務(wù)喳篇。但是dispatch_barrier_sync是在主線程中執(zhí)行敞临,dispatch_barrier_async是在子線程中執(zhí)行。如果有界面相關(guān)功能的代碼麸澜,或者需要立即執(zhí)行的代碼挺尿,就可以使用dispatch_barrier_sync。其他情況均可用dispatch_barrier_async在子線程中完成。