RunLoop的執(zhí)行順序

如果對(duì)Runloop基本概念不清楚的,可以先移步ibireme的這篇詳細(xì)的博文:深入理解RunLoop

這篇文章想更深入研究的一個(gè)問題是:

我們常用延遲調(diào)用函數(shù)的方法 :PerformSelector、 NSTimer奸鬓、Dispatch_Main_Queue

位隶,在任務(wù)被加入到RunLoop后被執(zhí)行的順序究竟是如何的串纺?


首先羡疗,閱讀下RunLoop的源碼后摆霉,可以得知RunLoop每跑一次循環(huán)會(huì)按優(yōu)先級(jí)處理各個(gè)隊(duì)列里的任務(wù), 處理順序依次為:

Source0-> Source1-> (Timer=Dispatch_Main_Queue)

那么NSTimer和Dispatch_Main_Queue很容易對(duì)應(yīng)上后面的兩個(gè)隊(duì)列豪椿,剩下的就是比較有意思的PerformSelector這個(gè)方法奔坟。

對(duì)PerformSelector的調(diào)用打個(gè)斷點(diǎn),發(fā)現(xiàn)PerformSelector是同步調(diào)用的搭盾。并不會(huì)schedule到Runloop中去咳秉。


那如果是調(diào)用PerformSelectorAfterDelay的方法是什么情況呢?

我們直接看堆棧:

可以看到鸯隅,如果是afterDelay的方法其實(shí)是Timer的回調(diào)里實(shí)現(xiàn)的澜建,哪怕Delay的時(shí)間你設(shè)置為0。

那我們?cè)倏匆幌轮苯邮褂肗STimer調(diào)用的堆棧:


OK蝌以, 都是在__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__中處理炕舵,試著調(diào)整下兩次調(diào)用的相對(duì)順序,發(fā)現(xiàn)函數(shù)被調(diào)用的順序也會(huì)相應(yīng)變化饼灿。

再試著調(diào)整下PerformSelector幕侠、NSTimer、Dispatch_Main_Queue的調(diào)用位置碍彭,發(fā)現(xiàn)其執(zhí)行順序是不會(huì)改變的晤硕。

綜上所示,我們可以得出一下幾點(diǎn)結(jié)論:

1. RunLoop內(nèi)執(zhí)行的優(yōu)先級(jí)庇忌,PerformSelector(同步)>(NSTimer=PerformSelectorAfterDelay=Dispatch_Main_Queue

2.?PerformSelectorAfterDelay和NSTimer一樣都是在Timer隊(duì)列中處理舞箍,按照進(jìn)入隊(duì)列的次序依次執(zhí)行




補(bǔ)充下,除了以上常用的方法外皆疹,還有一個(gè)CFRunLoopPerformBlock可以插入任務(wù)到Runloop中疏橄,該任務(wù)在處理source0之前和處理完timer和Dispatch_Main_Queue會(huì)被分別調(diào)用一次。

對(duì)應(yīng)的是__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末略就,一起剝皮案震驚了整個(gè)濱河市捎迫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌表牢,老刑警劉巖窄绒,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異崔兴,居然都是意外死亡彰导,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門敲茄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來位谋,“玉大人,你說我怎么就攤上這事堰燎√透福” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵爽待,是天一觀的道長损同。 經(jīng)常有香客問我翩腐,道長鸟款,這世上最難降的妖魔是什么膏燃? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮何什,結(jié)果婚禮上组哩,老公的妹妹穿的比我還像新娘。我一直安慰自己处渣,他們只是感情好伶贰,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著罐栈,像睡著了一般黍衙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荠诬,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天琅翻,我揣著相機(jī)與錄音,去河邊找鬼柑贞。 笑死方椎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的钧嘶。 我是一名探鬼主播棠众,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼有决!你這毒婦竟也來了闸拿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤书幕,失蹤者是張志新(化名)和其女友劉穎新荤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體按咒,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迟隅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了励七。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片智袭。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖掠抬,靈堂內(nèi)的尸體忽然破棺而出吼野,到底是詐尸還是另有隱情,我是刑警寧澤两波,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布瞳步,位于F島的核電站闷哆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏单起。R本人自食惡果不足惜抱怔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嘀倒。 院中可真熱鬧屈留,春花似錦、人聲如沸测蘑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碳胳。三九已至勇蝙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挨约,已是汗流浹背味混。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烫罩,地道東北人惜傲。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像贝攒,于是被迫代替她去往敵國和親盗誊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • 目錄(GCD): 關(guān)鍵詞 混淆點(diǎn) 場(chǎng)景應(yīng)用 總結(jié) 1. 關(guān)鍵詞 線程概念: 獨(dú)立執(zhí)行的代碼段隘弊,一個(gè)線程同時(shí)間只能執(zhí)...
    Ryan___閱讀 1,261評(píng)論 0 3
  • 從哪說起呢哈踱? 單純講多線程編程真的不知道從哪下嘴。梨熙。 不如我直接引用一個(gè)最簡單的問題开镣,以這個(gè)作為切入點(diǎn)好了 在ma...
    Mr_Baymax閱讀 2,734評(píng)論 1 17
  • RunLoop的基本了解 **1 . RunLoop字面的意思 : **運(yùn)行循環(huán) / 跑圈 **2 . 基本作用 ...
    Mario_ZJ閱讀 505評(píng)論 1 3
  • ======================= 前言 RunLoop 是 iOS 和 OSX 開發(fā)中非常基礎(chǔ)的一個(gè)...
    i憬銘閱讀 867評(píng)論 0 4
  • 「你的兒女,其實(shí)不是你的兒女 他們是生命對(duì)于自身渴望而誕生的孩子 他們借助你來到這世界质欲,卻非因你而來 他們?cè)谀闵砼?..
    Annabixin閱讀 874評(píng)論 1 1