RunLoop相關(guān)



引文:


  1. 概念

  2. 數(shù)據(jù)結(jié)構(gòu)

  3. 事件循環(huán)

  4. Runloop與NSTimer

  5. Runloop與多線程


概念:

runloop 是由系統(tǒng)內(nèi)部維護(hù)的事件循環(huán)對(duì)消息/事件進(jìn)行管理的對(duì)象

沒(méi)有消息需要處理時(shí),系統(tǒng)進(jìn)入休眠狀態(tài),節(jié)約資源.

用戶態(tài) --> 內(nèi)核態(tài)

如果有消息需要處理,會(huì)被立即喚醒 (手動(dòng)喚醒/NSTimer/Source1)

內(nèi)核態(tài) --> 用戶態(tài)
image.png

image.png

數(shù)據(jù)結(jié)構(gòu)

NSRunLoop是對(duì)CFRunLoop的封裝,提供了面向?qū)ο蟮腶pi.
CFRunLoopRef 是在 CoreFoundation 框架內(nèi)的,它提供了純 C 函數(shù)的 API,所有這些 API 都是線程安全的。
NSRunLoop 是基于 CFRunLoopRef 的封裝,提供了面向?qū)ο蟮?API,但是這些 API 不是線程安全的。

  • CFRunLoop

  • CFRunLoopMode

  • Source/Timer/Observer

CFRunLoop

image.png

CFRunLoopTimer

是基于時(shí)間的觸發(fā)器,它和 NSTimer 是toll-free bridged 的,可以混用。其包含一個(gè)時(shí)間長(zhǎng)度和一個(gè)回調(diào)(函數(shù)指針)。當(dāng)其加入到 RunLoop 時(shí),RunLoop會(huì)注冊(cè)對(duì)應(yīng)的時(shí)間點(diǎn),當(dāng)時(shí)間點(diǎn)到時(shí),RunLoop會(huì)被喚醒以執(zhí)行那個(gè)回調(diào)。


CFRunLoopObserver

觀測(cè)時(shí)間點(diǎn)

typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) {
    kCFRunLoopEntry         = (1UL << 0), // 即將進(jìn)入Loop
    kCFRunLoopBeforeTimers  = (1UL << 1), // 即將處理 Timer
    kCFRunLoopBeforeSources = (1UL << 2), // 即將處理 Source
    kCFRunLoopBeforeWaiting = (1UL << 5), // 即將進(jìn)入休眠
    kCFRunLoopAfterWaiting  = (1UL << 6), // 剛從休眠中喚醒
    kCFRunLoopExit          = (1UL << 7), // 即將退出Loop
};

一個(gè)RunLoop對(duì)象可以對(duì)應(yīng)多個(gè)Model, 每個(gè)Model 又有多個(gè)source/timer/observer

image.png

CommonMode 的特殊性

NSRunLoopCommonModes

  • CommonMode不是實(shí)際存在的一種Mode.

  • 是同步Source/Timer/Observer到多個(gè)Mode中的一種技術(shù)方案


事件循環(huán)機(jī)制:
image.png

RunLoop和NSTimer

滑動(dòng)tableview的時(shí)候定時(shí)器還會(huì)生效嗎?
當(dāng)滑動(dòng)tableview的時(shí)候定時(shí)器會(huì)從kCFRunLoopDefaultMode 切換到UITrackingRunLoopMode


怎么實(shí)現(xiàn)一個(gè)常駐線程
為當(dāng)前線程開(kāi)始runloop
向該runloop中添加port/Source維護(hù)runloop的事件循環(huán)\
啟動(dòng)該runloop
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容