1.什么是RunLoop?
從字面意思看:運(yùn)行循環(huán)舔糖、跑圈
其實(shí)它內(nèi)部就是do-while循環(huán)娱两,在這個(gè)循環(huán)內(nèi)部不斷地處理各種任務(wù)(比如Source、Timer金吗、Observer)
一個(gè)線程對(duì)應(yīng)一個(gè)RunLoop十兢,主線程的RunLoop默認(rèn)已經(jīng)啟動(dòng),子線程的RunLoop得手動(dòng)啟動(dòng)(調(diào)用run方法)
RunLoop只能選擇一個(gè)Mode啟動(dòng)摇庙,如果當(dāng)前Mode中沒有任何Source(Sources0旱物、Sources1)、Timer卫袒,那么就直接退出RunLoop
2.自動(dòng)釋放池什么時(shí)候釋放宵呛?
通過Observer監(jiān)聽RunLoop的狀態(tài)
第一次創(chuàng)建:第一次開啟runloop的時(shí)候
最后一次銷毀:runloop退出的時(shí)候
其他時(shí)候創(chuàng)建銷毀:當(dāng)runloop即將休眠事銷毀,重新創(chuàng)建一個(gè)新的夕凝。
3.在開發(fā)中如何使用RunLoop宝穗?什么應(yīng)用場景?
開啟一個(gè)常駐線程(讓一個(gè)子線程不進(jìn)入消亡狀態(tài)码秉,等待其他線程發(fā)來消息逮矛,處理其他事件)
在子線程中開啟一個(gè)定時(shí)器
在子線程中進(jìn)行一些長期監(jiān)控
可以控制定時(shí)器在特定模式下執(zhí)行
可以讓某些事件(行為、任務(wù))在特定模式下執(zhí)行
可以添加Observer監(jiān)聽RunLoop的狀態(tài)转砖,比如監(jiān)聽點(diǎn)擊事件的處理(在所有點(diǎn)擊事件之前做一些事情)