iOS NSTimer和RunLoop問題

1.淺談RunLoop

runLoop從字面的意思上看是運行中的循環(huán)驻呐,作用是保持APP的持續(xù)運行,處理APP的各種事件絮宁,比如點擊事件、定時器事件服协、Selector事件绍昂,節(jié)省CPU資源,提高APP的性能偿荷,能夠讓線程在有工作的時候忙碌窘游,在沒有工作的時候休眠


2.RunLoop和線程的關(guān)系

1.runLoop和線程是緊密關(guān)聯(lián)的,可以說是為了線程而生跳纳,沒有線程忍饰,runLoop也沒存在的必要。

2.runLoop和線程是一一對應(yīng)的棒旗,主線程的runLoop默認(rèn)是創(chuàng)建的喘批,子線程的需要手動創(chuàng)建。currentRunLoop懶加載的,在同一個子線程中創(chuàng)建多個runloop铣揉,則返回的都是同一個對象饶深,因為其是懶加載模式的

? ? ? 獲得主線程的runLoop:NSRunLoop *mainRunLoop =[NSRunLoop mainRunLoop];

? ? ? 獲得當(dāng)前線程runLoop:NSRunLoop *currentRunLoop =[NSRunLoop currentRunLoop];

3.在runloop中有多個運行模式,但是runloop只能選擇一種模式運行,mode里面至少要有一個timer或者是source

4.在第一次獲取時創(chuàng)建逛拱,在線程結(jié)束時銷毀


3.RunLoop的幾個類

1.CFRunLoopRef:NSRunLoop對象是OC對象敌厘,是對CFRunLoopRef的封裝,可以通過getCFRunLoop方法獲取其對應(yīng)的CFRunLoopRef對象朽合。注意俱两,NSRunLoop不是線程安全的,但CFRunLoopRef是線程安全的

2.RunLoopMode:NSRunLoop對象是一系列RunLoopMode的集合,每個mode包括有這個模式下所有的Source源曹步、Timer源和觀察者宪彩。每次RunLoop調(diào)用的時候都只能調(diào)用其中的一個mode,接收這個mode下的源讲婚,通知這個mode下的觀察者尿孔。這樣設(shè)計的主要目的就是為了隔離各個模式下的源和觀察者,使其不相互影響筹麸,常用的五種模式:

?kCFRunLoopDefaultMode:App默認(rèn)的mode活合,一般情況下App都是運行在這個mode ?下的

?UITrackingRunLoopMode:界面跟蹤時的mode,一般用于ScrollView滾動的時候追 蹤的物赶,保證滑動的時候不受其他事件影響

UIInitializationRunLoopMode:在剛啟動 App 時第進入的第一個 Mode白指,啟動完成后就不再使用

GSEventReceiveRunLoopMode:接受系統(tǒng)事件的內(nèi)部 Mode,一般用不到

kCFRunLoopCommonModes:占位mode酵紫,可以向其中添加其他mode用以檢測多個mode的事件

3.CFRunLoopSourceRef:事件源產(chǎn)生的地方

4.CFRunLoopTimerRef:是基于事件的觸發(fā)器告嘲,其中包含一段時間長度、延期容忍度和一個函數(shù)指針(回調(diào)方法)奖地。當(dāng)其加入到RunLoop中時状蜗,RunLoop會注冊一個時間點,當(dāng)?shù)竭_這個時間點后鹉动,會觸發(fā)對應(yīng)的事件轧坎。

5.CFRunLoopObserverRef:RunLoop的觀察者。每個觀察者都可以觀察RunLoop在某個模式下事件的觸發(fā)并處理

kCFRunLoopEntry:即將進入runLoop

kCFRunLoopBeforeTimers:即將處理Timer

kCFRunLoopBeforeSources:即將處理Source

kCFRunLoopBeforeWaiting:即將進入休眠

kCFRunLoopAfterWaiting:剛從休眠中被喚醒

kCFRunLoopExit:即將退出RunLoop


4.NSTimer在RunLoop中的使用

方式一:

圖1

方式二:

圖2

5.RunLoop常駐線程

注意事項:當(dāng)進入block的時候泽示,先創(chuàng)建了timer缸血,并且也把timer也把timer加入到runloop中,但是很重要的一點子線程中Runloop不會自動運行械筛,需要手動運行捎泻,因為這里沒有運行Runloop,所以timer就被釋放掉了埋哟,所以導(dǎo)致了啥都沒有笆豁。

小知識:[[NSRunLoop currentRunLoop] run]郎汪,運行runloop,

[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];指定runloop在指定模式下闯狱,設(shè)置開始時間,開啟成功會返回YES

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantFuture]];

運行runloop直到一個時間

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末煞赢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子哄孤,更是在濱河造成了極大的恐慌照筑,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘦陈,死亡現(xiàn)場離奇詭異凝危,居然都是意外死亡,警方通過查閱死者的電腦和手機晨逝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門蛾默,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捉貌,你說我怎么就攤上這事趴生。” “怎么了昏翰?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵苍匆,是天一觀的道長。 經(jīng)常有香客問我棚菊,道長浸踩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任统求,我火速辦了婚禮检碗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘码邻。我一直安慰自己折剃,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布像屋。 她就那樣靜靜地躺著怕犁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪己莺。 梳的紋絲不亂的頭發(fā)上奏甫,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音凌受,去河邊找鬼阵子。 笑死,一個胖子當(dāng)著我的面吹牛胜蛉,可吹牛的內(nèi)容都是我干的挠进。 我是一名探鬼主播色乾,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼领突!你這毒婦竟也來了暖璧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤攘须,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后殴泰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體于宙,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年悍汛,在試婚紗的時候發(fā)現(xiàn)自己被綠了捞魁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡离咐,死狀恐怖谱俭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宵蛀,我是刑警寧澤昆著,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站术陶,受9級特大地震影響凑懂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜梧宫,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一接谨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧塘匣,春花似錦脓豪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驰徊,卻和暖如春历谍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辣垒。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工望侈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人勋桶。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓脱衙,卻偏偏與公主長得像侥猬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子捐韩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

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