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() 內(nèi)觸發(fā)的 Source0,Source0 再觸發(fā)的 _UIApplicationHandleEventQueue()缔赠。source0一定是要喚醒runloop及時響應并執(zhí)行的交洗,如果runloop此時在休眠等待系統(tǒng)的 mach_msg事件,那么就會通過source1來喚醒runloop執(zhí)行橡淑。

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

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梁棠,一起剝皮案震驚了整個濱河市置森,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌符糊,老刑警劉巖凫海,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異男娄,居然都是意外死亡行贪,警方通過查閱死者的電腦和手機漾稀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來建瘫,“玉大人崭捍,你說我怎么就攤上這事牛” “怎么了殷蛇?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長橄浓。 經(jīng)常有香客問我粒梦,道長,這世上最難降的妖魔是什么荸实? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任匀们,我火速辦了婚禮,結果婚禮上准给,老公的妹妹穿的比我還像新娘昼蛀。我一直安慰自己,他們只是感情好圆存,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布叼旋。 她就那樣靜靜地躺著,像睡著了一般沦辙。 火紅的嫁衣襯著肌膚如雪夫植。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天油讯,我揣著相機與錄音详民,去河邊找鬼。 笑死陌兑,一個胖子當著我的面吹牛沈跨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兔综,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼饿凛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了软驰?” 一聲冷哼從身側響起涧窒,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锭亏,沒想到半個月后纠吴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡慧瘤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年戴已,在試婚紗的時候發(fā)現(xiàn)自己被綠了固该。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡糖儡,死狀恐怖伐坏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情休玩,我是刑警寧澤著淆,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布劫狠,位于F島的核電站拴疤,受9級特大地震影響,放射性物質發(fā)生泄漏独泞。R本人自食惡果不足惜呐矾,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望懦砂。 院中可真熱鬧蜒犯,春花似錦、人聲如沸荞膘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羽资。三九已至淘菩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間屠升,已是汗流浹背潮改。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留腹暖,地道東北人汇在。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像脏答,于是被迫代替她去往敵國和親糕殉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容

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