iOS RunLoop

原文鏈接:https://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=400417748&idx=1&sn=0c5f6747dd192c5a0eea32bb4650c160&3rd=MzA3MDU4NTYzMw==&scene=6#rd
1、iOS RunLoop都干了什么
RunLoop是一個接收處理異步消息事件的循環(huán),一個循環(huán)中:等待事件發(fā)生,然后將這個事件送到能處理它的地方。
RunLoop主要處理以下6類事件:

static void __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__();
static void __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__();
static void __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__();
static void __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__();
static void __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__();
static void __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__();

①Observer事件,runloop中狀態(tài)變化時進行通知。(微信卡頓監(jiān)控就是利用這個事件通知來記錄下最近一次main runloop活動時間,在另一個check線程中用定時器檢測當前時間距離最后一次活動時間過久來判斷在主線程中的處理邏輯耗時和卡主線程)。這里還需要特別注意,CAAnimation是由RunloopObserver觸發(fā)回調來重繪,接下來會講到。

②Block事件,非延遲的NSObject PerformSelector立即調用,dispatch_after立即調用,block回調。

③Main_Dispatch_Queue事件:GCD中dispatch到main queue的block會被dispatch到main loop執(zhí)行。

④Timer事件:延遲的NSObject PerformSelector,延遲的dispatch_after,timer事件。

⑤Source0事件:處理如UIEvent,CFSocket這類事件。需要手動觸發(fā)。觸摸事件其實是Source1接收系統(tǒng)事件后在回調 __IOHIDEventSystemClientQueueCallback() 內觸發(fā)的 Source0,Source0 再觸發(fā)的 _UIApplicationHandleEventQueue()。source0一定是要喚醒runloop及時響應并執(zhí)行的,如果runloop此時在休眠等待系統(tǒng)的 mach_msg事件,那么就會通過source1來喚醒runloop執(zhí)行。

⑥Source1事件:處理系統(tǒng)內核的mach_msg事件。(推測CADisplayLink也是這里觸發(fā))。

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

相關閱讀更多精彩內容

  • Runloop是iOS和OSX開發(fā)中非?;A的一個概念,從概念開始學習。 RunLoop的概念 -般說,一個線程一...
    小貓仔閱讀 1,124評論 0 1
  • 通過前面幾篇文章可以知道RunLoop實際上是一個事件處理的循環(huán).只要一個線程啟動了RunLoop,在它沒有收到事...
    brownfeng閱讀 2,039評論 0 7
  • 前言 最近離職了,可以盡情熬夜寫點總結,不用擔心第二天上班爽并蛋疼著,這篇的主角 RunLoop 一座大山,涵蓋的...
    zerocc2014閱讀 12,562評論 13 67
  • RunLoop是一個接收處理異步消息事件的循環(huán),一個循環(huán)中:等待事件發(fā)生,然后將這個事件送到能處理它的地方。 如圖...
    清風沐沐閱讀 472評論 0 0
  • 什么昵稱都沒有閱讀 485評論 8 14

友情鏈接更多精彩內容