Runloop理解:
每個線程都有一個消息循環(huán)—>消息循環(huán)監(jiān)聽著輸入事件—>事件有兩種類型—>輸入源和定時源—>將創(chuàng)建好的輸入源以確定的模式加入消息循環(huán)中 —> 由于子線程消息循環(huán)默認(rèn)不開啟, 所以線程中無法監(jiān)聽到是否有方法需要其執(zhí)行,就會銷毀,導(dǎo)致方法執(zhí)行不到 —> 需要開啟子線程的消息循環(huán) —> 三種開啟方法, run開啟了無法關(guān)閉, runUntilDate雖然開啟了確定的時間也不靠譜 , 蘋果提供了判斷模式,點擊run 右邊幫助欄查找. RunLoop是時間循環(huán)闯传,負(fù)責(zé)監(jiān)聽事件,保證應(yīng)用程序持續(xù)運行。監(jiān)聽到事件后,向注冊的對象發(fā)送消息,從而實現(xiàn)事件響應(yīng)
Runloop(消息循環(huán))的目的
保證程序不退出負(fù)責(zé)處理輸入事件
事件類型如下:
如果沒有事件發(fā)生, 會讓程序進入休眠狀態(tài),通俗的講择吊,runloop主要就是為保證程序在執(zhí)行過程中不會被系統(tǒng)終止,確保不斷的監(jiān)聽用戶交互行為
runloop的運行循環(huán)模式:
有5種模式
第一種就是默認(rèn)模式: 也就是一般的方法調(diào)用使用的模式。
第二種就是跟蹤模式: 用于scrollview追蹤觸摸滑動, 使其不受其他模式的影響, 可以共存菠镇。
第三種就是當(dāng)程序啟動時第一次開啟的運行循環(huán)模式。
第四種的話 一般開發(fā)中沒聽到過承璃。沒有去研究過利耍。
第五種是一種占位模式。不過沒什么太大用處盔粹。
系統(tǒng)默認(rèn)注冊了5個Mode:
NSDefaultRunLoopMode:App 的默認(rèn) Mode隘梨,通常主線程是在這個 Mode 下運行(默認(rèn)情況下運行)
UITrackingRunLoopMode:界面跟蹤 Mode,用于 ScrollView 追蹤觸摸滑動舷嗡,保證界面滑動時不受其他 Mode 影響(操作 UI 界面的情況下運行)
UIInitializationRunLoopMode:在剛啟動 App 時進入的第一個 Mode轴猎,啟動完成后就不再使用
GSEventReceiveRunLoopMode:接受系統(tǒng)事件的內(nèi)部 Mode,通常用不到(繪圖服務(wù))
NSRunLoopCommonModes:這是一個占位用的 Mode进萄,不是一種真正的 Mode (RunLoop無法啟動該模式捻脖,設(shè)置這種模式下,默認(rèn)和操作 UI 界面時線程都可以運行中鼠,但無法改變 RunLoop 同時只能在一種模式下運行的本質(zhì))
Runloop本質(zhì):
其實是一個結(jié)構(gòu)體可婶。里面有observer。nstimer援雇。source(監(jiān)聽事件的)等等