程序都是從 main 函數(shù)開(kāi)始啟動(dòng)的,隨著 main 函數(shù)里執(zhí)行體結(jié)束之后 main 函數(shù)也會(huì)結(jié)束艺演,程序也會(huì)退出市咆。但是為什么程序可以保持一個(gè)活躍的狀態(tài)呢?
在 main 函數(shù)的 UIApplicationMain 內(nèi)部會(huì)啟用一個(gè)線程循環(huán)汗捡,也就是 RunLoop虽抄。它可以不斷的接收一些事件,比如屏幕點(diǎn)擊辛燥,滑動(dòng)等筛武,處理完之后繼續(xù)處于一個(gè)等待的狀態(tài)。下面詳細(xì)介紹一下 RunLoop
什么是RunLoop?
RunLoop 是通過(guò)內(nèi)部維護(hù)的事件循環(huán)來(lái)對(duì)事件/消息進(jìn)行管理的一個(gè)對(duì)象(狀態(tài)的切換)
- 沒(méi)有消息需要處理時(shí)挎塌,休眠以避免資源占用
-
有消息需要處理時(shí)徘六,立刻被喚醒
用戶態(tài): 應(yīng)用程序一般都運(yùn)行在用戶態(tài)上
內(nèi)核態(tài): 系統(tǒng)調(diào)用,需要使用到一些操作系統(tǒng)以及一些底層內(nèi)核指令或者API
具體包括 RunLoop 的數(shù)據(jù)結(jié)構(gòu)和詳細(xì)說(shuō)明勃蜘,請(qǐng)看這里 Runloop摘錄,剖析的很詳細(xì)硕噩,就不重復(fù)了。