Runloop

沒有Runloop:

代碼執(zhí)行完畢后牍疏,直接執(zhí)行return 0箍铲。程序執(zhí)行結(jié)束菩收。

有Runloop:

程序并不會馬上退出,而是保持運(yùn)行狀態(tài)

基本作用:

保持程序的持續(xù)運(yùn)行

處理App中的各種事件

節(jié)省CPU資源鲸睛,提高程序性能

int retVal = 0;.png

當(dāng)有事件來的時候就處理娜饵,完成后就為0,繼續(xù)睡眠官辈。

RunLoop與線程

一條線程對應(yīng)一個RunLoop對象

保存方式是 保存在全局的字典當(dāng)中箱舞,以線程為Key,對象為value

生命周期:生->線程創(chuàng)建時拳亿,RunLoop第一次被獲取的時候創(chuàng)建對象
死->當(dāng)線程結(jié)束時被銷毀

主線程一開始就有RunLoop , 子線程默認(rèn)沒有被開啟晴股。

模式:

一個RunLoop對象有若干個Mode,每個Mode又包含若干個Source0/Source1/Timer/Observer

RunLoop啟動時只能選擇其中一個Mode肺魁,作為currentMode

如果需要切換Mode电湘,只能退出當(dāng)前Loop,再重新選擇一個Mode進(jìn)入

不同組的Source0/Source1/Timer/Observer能分隔開來鹅经,互不影響

如果Mode里沒有任何Source0/Source1/Timer/Observer寂呛,RunLoop會立馬退出

常見的2種Mode

kCFRunLoopDefaultMode(NSDefaultRunLoopMode):App的默認(rèn)Mode,通常主線程是在這個Mode下運(yùn)行
(默認(rèn)模式)

UITrackingRunLoopMode:界面跟蹤 Mode瘾晃,用于 ScrollView 追蹤觸摸滑動贷痪,保證界面滑動時不受其他 Mode 影響
(滑動模式)

Run Loop Observer Activities.png

執(zhí)行流程圖

執(zhí)行邏輯:所謂的執(zhí)行邏輯就是

你不做事,這個App開著其實(shí)是在休眠的蹦误,CPU沒有運(yùn)行劫拢。

但是你一做事情肉津,或收到消息,RunLoop就會接受到事件舱沧,去處理一些事情妹沙。

處理完以后,再次進(jìn)入到休眠中狗唉,一直循環(huán)初烘。

休眠的細(xì)節(jié)

使用底層代碼使CPU停止,而不是使用While循環(huán)分俯,這樣保證CPU不處理程序的任務(wù)肾筐,完全的休眠。

等有消息的時候在喚醒線程

Runloop 是怎么響應(yīng)用戶操作的缸剪, 具體流程是什么樣的吗铐?

Source1 捕捉事件
Source0 處理事件

程序中添加每3秒響應(yīng)一次的NSTimer,當(dāng)拖動Tableview時timer可能無法響應(yīng)要怎么解決?

將NSTimer加入到RunLoop對象中去杏节,設(shè)置common模式唬渗。
Timer與RunLoop的關(guān)系。RunLoop里面有Mode,而mode里面有Timer.
當(dāng)Timer設(shè)置common模式時奋渔,

結(jié)構(gòu)

// 模式
//1. Name 模式名字
//2. 處理者
//3. 捕捉者
//4. 如果添加了觀察者镊逝,在這里存放
//5. 存放這個模式能夠使用的計時器

typedef struct _CFRunLoopMode CFRunLoopModeRef;.png

//RunLoop 對象
// 1.所在線程
// 2.通用模式,如果有計時器被設(shè)置了通用模式嫉鲸,那么這個里面就裝著有的對象可以同時多個模式被使用撑蒜。
// 3.通用模式對象, 存放在這個集合中的對象能夠被設(shè)置為通用模式
// 4.當(dāng)前使用的模式
// 5.所有模式

typedef struct CFRunLoop 米 CFRunLoopRef;.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末玄渗,一起剝皮案震驚了整個濱河市座菠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌藤树,老刑警劉巖浴滴,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異岁钓,居然都是意外死亡升略,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門屡限,熙熙樓的掌柜王于貴愁眉苦臉地迎上來降宅,“玉大人,你說我怎么就攤上這事囚霸⊙” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵拓型,是天一觀的道長额嘿。 經(jīng)常有香客問我瘸恼,道長,這世上最難降的妖魔是什么册养? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任东帅,我火速辦了婚禮,結(jié)果婚禮上球拦,老公的妹妹穿的比我還像新娘靠闭。我一直安慰自己,他們只是感情好坎炼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布愧膀。 她就那樣靜靜地躺著,像睡著了一般谣光。 火紅的嫁衣襯著肌膚如雪檩淋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天萄金,我揣著相機(jī)與錄音蟀悦,去河邊找鬼。 笑死氧敢,一個胖子當(dāng)著我的面吹牛日戈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播孙乖,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涎拉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了的圆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤半火,失蹤者是張志新(化名)和其女友劉穎越妈,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钮糖,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梅掠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了店归。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阎抒。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖消痛,靈堂內(nèi)的尸體忽然破棺而出且叁,到底是詐尸還是另有隱情,我是刑警寧澤秩伞,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布逞带,位于F島的核電站欺矫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏展氓。R本人自食惡果不足惜穆趴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望遇汞。 院中可真熱鬧未妹,春花似錦、人聲如沸空入。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽执庐。三九已至酪耕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間轨淌,已是汗流浹背迂烁。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留递鹉,地道東北人盟步。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像躏结,于是被迫代替她去往敵國和親却盘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

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