如題涉及到的三個對象: 主隊列,?同步添加任務(wù):dispatch_sync(main_queue,block), 所添加的任務(wù):block;
一.主隊列特點:后面的任務(wù)必須等待前面的任務(wù)執(zhí)行完成才可以進(jìn)行執(zhí)行,不能插隊;
二.同步添加任務(wù):dispatch_sync(main_queue,block)函數(shù)的特點:必須等待其所提交的任務(wù)block執(zhí)行完成,此函數(shù)才能返回,函數(shù)返回后,此函數(shù)才算執(zhí)行完成;
三.所添加的任務(wù):block:?由于此任務(wù)由于被dispatch_sync()添加到了主隊列,再根據(jù)主隊列的特點,所以此任務(wù)必須等待dispatch_sync()函數(shù)執(zhí)行完成之后才能進(jìn)行執(zhí)行;再結(jié)合第二點,dispatch_sync()函數(shù)必須等待block任務(wù)執(zhí)行完成才能返回.所以造成死鎖;
舉例:
現(xiàn)在有三個人:老板, 你, 亞飛;
用上三個人 模擬同步提交任務(wù)到主隊列:dispatch_sync(main_queue,block)
老板給你打電話,要求你聯(lián)系亞飛,問亞飛大保健多少錢一次,然后老板在線等結(jié)果,然而你除了現(xiàn)在和老板通電話的手機(jī)之外,沒有任何聯(lián)系亞飛的方式. 那么此時的局面就是:老板等你給結(jié)果,而你在等待老板掛斷電話. 這就造成了死鎖;
用上三個人 模擬異步提交任務(wù)到主隊列:dispatch_async(main_queue,block)
老板給你打電話,要求你聯(lián)系亞飛,問亞飛大保健多少錢一次,然后老板在線等你結(jié)果,此時你就會給亞飛發(fā)一個微信,得到亞飛的回復(fù)之后,你就立馬告訴老板結(jié)果.所以不會造成死所