關(guān)于死鎖,學過操作系統(tǒng)的同學們都知道,就是不能繼續(xù)執(zhí)行,卡(qia)住在當前狀態(tài)值。在代碼中表現(xiàn)的就是:crash,崩潰,在軟件上就是閃退、卡住了。那么,死鎖是怎么造成的又應該怎么避免呢?接下來就是見證奇跡的時刻!!
死鎖
1、直接在主隊列中提交同步任務(wù)。
2、在主隊列的異步任務(wù)執(zhí)行任務(wù)中提交同步任務(wù)到主隊列。
3、謹慎使用dispath_sync函數(shù)。
如圖所示:
死鎖狀態(tài):
使用:dispath_sync函數(shù)
死鎖
輸出結(jié)果
使用異步:dispath_async函數(shù)
正常
輸出結(jié)果
GCD
使用GCD主要是應用于多線程的使用,比如:網(wǎng)絡(luò)請求數(shù)據(jù),而UI的界面加載和刷新則需要在主線程里面進行。此處啰嗦一點:在使用MBProgress這個提示框時候,就需要在主線程中使用。
如圖:(借用別人的圖,之后有詳細的講解鏈接奉上)
GCD使用
輸出結(jié)果
這段代碼也實現(xiàn)了1234正常的順序,登錄--付款--下載--更新UI的功能,首先說明一下打印結(jié)果當中共出現(xiàn)了三個線程,但是注意每一次點擊事件我們只用到兩個線程,一個是主線程(系統(tǒng)自動創(chuàng)建,)一個是71行我們自己創(chuàng)建的子線程,至于打印結(jié)果出現(xiàn)了number = 3這個線程的問題是因為GCD透明優(yōu)化和系統(tǒng)的原因,我們不用管理這些問題.只要清楚每次點擊事件只有兩個線程,兩個隊列(主隊列和global)就可以了。
圖二:
GCD使用
輸出結(jié)果
隊列
隊列問題可以查看以下鏈接內(nèi)容
鏈接:http://www.cnblogs.com/LDSmallCat/p/4910080.html
鏈接:http://www.cnblogs.com/LDSmallCat/p/4910158.html
此處的問題相信讀者可以看明白。如若有錯誤請噴并指正!!