從NSTimer的運(yùn)行機(jī)制來了解RunLoop

先了解下Runloop的幾種模式棺牧,常用的有兩種,NSDefaultRunLoopMode 默認(rèn)模式、UITrackingRunLoopMode UI模式??、 NSRunLoopCommonModes? UI模式&默認(rèn)模式

而Runloop是一個(gè)運(yùn)行循環(huán)厢绝,負(fù)責(zé)監(jiān)聽事件,沒有事件發(fā)生時(shí)會(huì)進(jìn)入休眠狀態(tài)带猴,雖然他再一次循環(huán)中只處理一個(gè)事件昔汉,但他循環(huán)一次的時(shí)間非常短,所以當(dāng)他再一次循環(huán)中渲染界面的時(shí)候會(huì)chua的一下就完成了拴清。

再說說NSTimer 靶病,計(jì)時(shí)器是碼字過程中經(jīng)常會(huì)用到的会通,但是很多時(shí)候,對他的運(yùn)行機(jī)制了解的并不夠

咱先看下基本用法:

倘若將模式換成默認(rèn)娄周,會(huì)發(fā)生個(gè)面試?yán)仙U劦膯栴}涕侈,就是當(dāng)UI模式有事件需要響應(yīng)時(shí),RunLoop會(huì)切換到UI模式下完成相應(yīng)的事件操作煤辨,才會(huì)回到默認(rèn)模式下繼續(xù)執(zhí)行計(jì)時(shí)器操作裳涛,所以就牽出了NSTimer 的另一種用法

scheduledTimerWithTimeInterval會(huì)默認(rèn)執(zhí)行[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode],將其加到默認(rèn)模式下掷酗,倘若確定計(jì)時(shí)器下不會(huì)有UI事件產(chǎn)生调违,可以用這種方式

另外有一點(diǎn)需要注意的是雖然每個(gè)線程都會(huì)有自己的RunLoop窟哺,但是除了主線程外泻轰,其他線程的RunLoop都是默認(rèn)不開啟的,咱先來看一段代碼

可以發(fā)現(xiàn)且轨,當(dāng)前線程是新開的子線程浮声,但是計(jì)時(shí)器的卻并沒有像在主線程的中那樣重復(fù)執(zhí)行我們的timerAction方法,那是因?yàn)槲覀冏泳€程中的RunLoop是默認(rèn)不開啟的旋奢,他并不會(huì)像在主線程中那樣有運(yùn)行循環(huán)持續(xù)監(jiān)聽我們的計(jì)時(shí)器事件泳挥,解決辦法是需要我們手動(dòng)開啟當(dāng)前線程的RunLoop,像這樣


[[NSRunLoop currentRunLoop] run]讓當(dāng)前的RunLoop跑起來,那么問題來了至朗,run后面的代碼并沒有執(zhí)行屉符,其實(shí)是因?yàn)镽unLoop不僅僅是個(gè)運(yùn)行循環(huán),還是個(gè)特殊的死循環(huán)锹引,所以后面的語句并不會(huì)執(zhí)行矗钟,解決方法也很簡單,只需要給當(dāng)前的RunLoop一個(gè)循環(huán)時(shí)間就行了[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:10]];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嫌变,一起剝皮案震驚了整個(gè)濱河市吨艇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腾啥,老刑警劉巖东涡,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異倘待,居然都是意外死亡疮跑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門凸舵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祖娘,“玉大人,你說我怎么就攤上這事贞间』咛酰” “怎么了雹仿?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長整以。 經(jīng)常有香客問我胧辽,道長,這世上最難降的妖魔是什么公黑? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任邑商,我火速辦了婚禮,結(jié)果婚禮上凡蚜,老公的妹妹穿的比我還像新娘人断。我一直安慰自己,他們只是感情好朝蜘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布恶迈。 她就那樣靜靜地躺著,像睡著了一般谱醇。 火紅的嫁衣襯著肌膚如雪暇仲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天副渴,我揣著相機(jī)與錄音奈附,去河邊找鬼。 笑死煮剧,一個(gè)胖子當(dāng)著我的面吹牛斥滤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播勉盅,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼佑颇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了菇篡?” 一聲冷哼從身側(cè)響起漩符,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎驱还,沒想到半個(gè)月后嗜暴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡议蟆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年闷沥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咐容。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舆逃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情路狮,我是刑警寧澤虫啥,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站奄妨,受9級特大地震影響涂籽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜砸抛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一评雌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧直焙,春花似錦景东、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至丝里,卻和暖如春曲初,著一層夾襖步出監(jiān)牢的瞬間体谒,已是汗流浹背杯聚。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抒痒,地道東北人幌绍。 一個(gè)月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像故响,于是被迫代替她去往敵國和親傀广。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

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

  • 說明iOS中的RunLoop使用場景1.保持線程的存活彩届,而不是線性的執(zhí)行完任務(wù)就退出了<1>不開啟RunLoop的...
    野生塔塔醬閱讀 6,797評論 15 109
  • RunLoop 文章目錄 RunLoop簡介 1.1 什么是RunLoop伪冰? 1.2 RunLoop和線程 1.3...
    May_d8f1閱讀 286評論 0 1
  • 文章目錄 RunLoop簡介 1.1 什么是RunLoop? 1.2 RunLoop和線程 1.3 默認(rèn)情況下主線...
    咖啡綠茶1991閱讀 287評論 0 0
  • iOS刨根問底-深入理解RunLoop 概述 RunLoop作為iOS中一個(gè)基礎(chǔ)組件和線程有著千絲萬縷的關(guān)系樟蠕,同時(shí)...
    reallychao閱讀 821評論 0 6
  • Runloop 是和線程緊密相關(guān)的一個(gè)基礎(chǔ)組件贮聂,是很多線程有關(guān)功能的幕后功臣。盡管在平常使用中幾乎不太會(huì)直接用到寨辩,...
    jackyshan閱讀 9,860評論 10 75