runloop 相關(guān)知識(shí)總結(jié)

RunLoop 即運(yùn)行循環(huán)赎瞎,也叫事件循環(huán)牌里,本質(zhì)為一個(gè)死循環(huán)。iOS一個(gè)程序運(yùn)行起來(lái)之后务甥,默認(rèn)會(huì)開啟一個(gè)運(yùn)行循環(huán)牡辽,有需要處理的操作時(shí),比如用戶的輸入事件時(shí)缓呛,RunLoop會(huì)自己跑起來(lái)運(yùn)行,沒(méi)有需要處理的事件時(shí)進(jìn)入休息休眠的狀態(tài)杭隙,充分節(jié)省CPU資源哟绊,提高程序的性能。

一痰憎、RunLoop的作用:

1.保證程序運(yùn)行不退出票髓,準(zhǔn)確的說(shuō)是保證線程的不退出,一般一個(gè)線程對(duì)應(yīng)一個(gè)RunLoop铣耘。一個(gè)線程的任務(wù)執(zhí)行完畢之后洽沟,就會(huì)退出,有時(shí)候我們需要一個(gè)線程隨時(shí)待命蜗细,保持運(yùn)行的狀態(tài)不會(huì)退出裆操,例如主線程,這就需要RunLoop這樣的機(jī)制來(lái)完成這樣的任務(wù)炉媒。

RunLoop實(shí)際上只是一個(gè)對(duì)象踪区,只是給我們提供了一個(gè)函數(shù)的入口來(lái)執(zhí)行RunLoop的邏輯。

2.處理app的各種事件:包括輸入源和定時(shí)源吊骤,處理的順序遵循先進(jìn)先出的隊(duì)列順序缎岗。

3.節(jié)省CPU資源,優(yōu)化程序:當(dāng)沒(méi)有事件可處理的時(shí)候白粉,RunLoop會(huì)通知系統(tǒng)传泊,現(xiàn)在沒(méi)有事情要處理了鼠渺,可以休息了,系統(tǒng)可以節(jié)省出資源去做其他的事情眷细,當(dāng)有事件要處理的時(shí)候拦盹,RunLoop立刻運(yùn)行起來(lái)進(jìn)行處理。

二薪鹦、RunLoop與線程的關(guān)系:

1.一條線程都有與之對(duì)應(yīng)的唯一的RunLoop的對(duì)象掌敬。

2.RunLoop在第一次獲取時(shí)創(chuàng)建,在線程運(yùn)行結(jié)束后銷毀池磁,只有在線程內(nèi)部獲取到該線程的RunLoop(主線程除外)奔害。

3.主線程的RunLoop自動(dòng)開啟,子線程的RunLoop需要手動(dòng)開啟地熄。

在我們平時(shí)建立項(xiàng)目的時(shí)候华临,其實(shí)已將使用了RunLoop,程序的啟動(dòng)入口:


int main(int argc, char * argv[]) {

@autoreleasepool {

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

}

}

UIApplicationMain函數(shù)內(nèi)部就是啟動(dòng)了主線程的RunLoop端考。

4.RunLoop其實(shí)就是用來(lái)管理線程的雅潭,可以說(shuō),沒(méi)有線程却特,就沒(méi)有RunLoop存在的必要扶供,在RunLoop一旦開啟之后,就會(huì)對(duì)線程進(jìn)行管理操作裂明,在線程執(zhí)行完任務(wù)后椿浓,線程便會(huì)進(jìn)入休眠狀態(tài),并且不會(huì)退出闽晦,隨時(shí)等待新的任務(wù)扳碍。

5.我們可以通過(guò)以下的代碼獲取主線程和當(dāng)前線程RunLoop.

[NSRunLoop currentRunLoop];? ? ? ? [NSRunLoop mainRunLoop];

三、RunLoop的幾種mode:

基本上有五種形式的mode仙蛉,有的是蘋果內(nèi)部使用笋敞,我們實(shí)際開發(fā)中用不到:

1、kCFRunLoopDefaultMode 默認(rèn)模式荠瘪,通常主線程在這個(gè)模式下運(yùn)行

2夯巷、UITrackingRunLoopMode 界面跟蹤Mode,用于追蹤Scrollview觸摸滑動(dòng)時(shí)的狀態(tài)哀墓。

3鞭莽、kCFRunLoopCommonModes 占位符,帶有Common標(biāo)記的字符串麸祷,比較特殊的一個(gè)mode澎怒;

4、UIInitializationRunLoopMode:剛啟動(dòng)App時(shí)進(jìn)入的第一個(gè)Mode,啟動(dòng)后不在使用喷面。

5星瘾、GSEventReceiveRunLoop:內(nèi)部Mode,接收系事件

其中惧辈,NSRunLoopCommonModes等效于NSDefaultRunLoopMode和NSEventTrackingRunLoopMode兩種模式的結(jié)合

需要注意的是:RunLoop每次只能指定一種Mode琳状。而且如果需要切換 Mode,只能退出當(dāng)前 Loop盒齿。所以一般我們見到的定時(shí)器實(shí)現(xiàn)無(wú)線輪播功能的時(shí)候念逞,需要將定時(shí)器加入到RunLoop的模式改為NSRunLoopCommonModes,才能實(shí)現(xiàn)滾動(dòng)界面的時(shí)候不會(huì)影響到輪播器的滾動(dòng)边翁,就是這個(gè)原因翎承。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市符匾,隨后出現(xiàn)的幾起案子叨咖,更是在濱河造成了極大的恐慌,老刑警劉巖啊胶,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甸各,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡焰坪,警方通過(guò)查閱死者的電腦和手機(jī)趣倾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)某饰,“玉大人儒恋,你說(shuō)我怎么就攤上這事÷斗Γ” “怎么了碧浊?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵涂邀,是天一觀的道長(zhǎng)瘟仿。 經(jīng)常有香客問(wèn)我,道長(zhǎng)比勉,這世上最難降的妖魔是什么劳较? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮浩聋,結(jié)果婚禮上观蜗,老公的妹妹穿的比我還像新娘。我一直安慰自己衣洁,他們只是感情好墓捻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坊夫,像睡著了一般砖第。 火紅的嫁衣襯著肌膚如雪撤卢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天梧兼,我揣著相機(jī)與錄音放吩,去河邊找鬼。 笑死羽杰,一個(gè)胖子當(dāng)著我的面吹牛渡紫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播考赛,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼惕澎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了欲虚?” 一聲冷哼從身側(cè)響起集灌,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎复哆,沒(méi)想到半個(gè)月后欣喧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梯找,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年唆阿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锈锤。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡驯鳖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出久免,到底是詐尸還是另有隱情浅辙,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布阎姥,位于F島的核電站记舆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏呼巴。R本人自食惡果不足惜泽腮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衣赶。 院中可真熱鬧诊赊,春花似錦、人聲如沸府瞄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鲸郊,卻和暖如春敲街,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背严望。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工多艇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人像吻。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓峻黍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親拨匆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子姆涩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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