RunLoop 相關(guān)知識點(diǎn)

RunLoop是開源的:RunLoop源碼下載地址

RunLoop是事件接收和分發(fā)機(jī)制的一個(gè)實(shí)現(xiàn),是消息機(jī)制的處理模式。

什么是RunLoop?

  1. 內(nèi)部就是do-while循環(huán),這個(gè)循環(huán)內(nèi)部不斷地處理各種任務(wù)(如:Sources、Observer、Timer)
  2. 一個(gè)線程對應(yīng)一個(gè)RunLoop,主線程的RunLoop默認(rèn)已經(jīng)啟動,子線程的RunLoop需要手動啟動(調(diào)用run方法)
  3. RunLoop只能選擇一個(gè)mode啟動,如果當(dāng)前mode中沒有任何Sources(Source0、Source1)、Timer,那么直接退出RunLoop

RunLoop與線程:

  • RunLoop主要目的是保證程序執(zhí)行的線程不會被系統(tǒng)終止

  • 每條線程都有唯一的一個(gè)與之對應(yīng)的RunLoop對象

  • 主線程的RunLoop已經(jīng)自動創(chuàng)建好了,子線程的RunLoop需要主動創(chuàng)建

  • RunLoop在第一次獲取時(shí)創(chuàng)建,在線程結(jié)束時(shí)銷毀


Core Foundation中關(guān)于RunLoop的5個(gè)類:

  • CFRunLoopRef --- 包含了若干個(gè)CFRunLoopModeRef對象

  • CFRunLoopModeRef --- RunLoop的對象(若干個(gè)),是一個(gè)集合,包括監(jiān)聽:事件源、定時(shí)器,以及需要通知Observers

  • CFRunLoopSourceRef --- CFRunLoopModeRef對象中的Set類型元素(若干個(gè))

  • CFRunLoopTimerRef --- CFRunLoopModeRef對象中的Array類型元素(若干個(gè))

  • CFRunLoopObserverRef --- CFRunLoopModeRef對象中的Array類型元素(若干個(gè))

其中CFRunLoopSourceRef的分類

  • 理論分類


  • 實(shí)踐分類(按照函數(shù)調(diào)用棧分類)

    1. Source0(非基于Port的)
    2. Source1(基于Port的 --- 通過內(nèi)核和其它線程通信,接收、分發(fā)系統(tǒng)事件)
      Source1接收到事件后,會分發(fā)給Source0去處理

Xcode中獲取RunLoop:

Foundation:

[NSRunLoop currentRunLoop]; // 獲得當(dāng)前線程的RunLoop對象

[NSRunLoop mainRunLoop];    // 獲得主線程的RunLoop對象

Core Foundation:

CFRunLoopGetCurrent();  // 獲得當(dāng)前線程的RunLoop對象

CFRunLoopGetMain();     // 獲得主線程的RunLoop對象 

CFRunLoopModeRef 系統(tǒng)默認(rèn)注冊了5個(gè)Mode:

  • kCFRunLoopDefaultMode:App的默認(rèn)Mode,通常主線程是在這個(gè)Mode下運(yùn)行

  • UITrackingRunLoopMode:界面跟蹤 Mode,用于 ScrollView 追蹤觸摸滑動,保證界面滑動時(shí)不受其他 Mode 影響

  • UIInitializationRunLoopMode: 在剛啟動 App 時(shí)第進(jìn)入的第一個(gè) Mode,啟動完成后就不再使用 ---- <用不上>

  • GSEventReceiveRunLoopMode: 接受系統(tǒng)事件的內(nèi)部 Mode,通常用不到 ---- <用不上>

  • kCFRunLoopCommonModes: 這是一個(gè)占位用的Mode,不是一種真正的Mode

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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