RunLoop

RunLoop的實質是一個死循環(huán)诗越,用于保證程序的持續(xù)運行匹厘,只有當程序退出的時候才會結束

1。保證線程的長時間存活
2诸衔。處理App中的各種事件(觸摸盯漂、定時器、Selector事件)
3笨农。節(jié)省CPU資源就缆,提高程序性能(該做事做事,沒事做休息)

RunLoop相關類:
CFRunLoopRef:代表RunLoop的對象
CFRunLoopModeRef:RunLoop的運行模式
CFRunLoopSourceRef:就是RunLoop模型圖中提到的輸入源/事件源
CFRunLoopTimerRef:就是RunLoop模型圖中提到的定時源
CFRunLoopObserverRef:觀察者谒亦,能夠監(jiān)聽RunLoop的狀態(tài)改變

RunLoop模式常用有3個:
NSDefaultRunLoopMode->默認模式竭宰,主線程中默認是NSDefaultRunLoopMode
UITrackingRunLoopMode->視圖滾動模式,RunLoop會處于該模式下
NSRunLoopCommonModes->并不是真正意義上的Mode份招,是一個占位用的“Mode”切揭,默認包含了NSDefaultRunLoopMode和UITrackingRunLoopMode兩種模式

runloop和線程的關系:

主線程Runloop已經(jīng)創(chuàng)建好了,子線程的runloop需要手動創(chuàng)建 锁摔;一條線程對應一個RunLoop對象廓旬,每條線程都有唯一一個與之對應的RunLoop對象。一般來講谐腰,一個線程一次只能執(zhí)行一個任務孕豹,執(zhí)行完成后線程就會退出

runloop的實際使用:

1涩盾。RunLoop運行模式對NSTimer定時器的影響。

NSTimer的定時器是受運行模式影響的励背,而開發(fā)中我們有時候徹底去除這種影響春霍,很顯然,NSTimer定時器不能做到這點叶眉,這時址儒,我們可以使用GCD的定時器。

2衅疙。ImageView推遲顯示-->實現(xiàn)圖片加載性能優(yōu)化

當界面中含有UITableView莲趣,而且每個UITableViewCell里邊都有圖片。這時候當我們滾動UITableView的時候饱溢,如果有一堆的圖片需要顯示妖爷,那么可能會出現(xiàn)卡頓的現(xiàn)象。
2.1. 監(jiān)聽UIScrollView的滾動
因為UITableView繼承自UIScrollView理朋,所以我們可以通過監(jiān)聽UIScrollView的滾動絮识,實現(xiàn)UIScrollView相關delegate即可。
2.2. 利用PerformSelector設置當前線程的RunLoop的運行模式
利用 performSelector 方法為UIImageView調(diào)用 setImage: 方法嗽上,并利用 inModes 將其設置為RunLoop下NSDefaultRunLoopMode運行模式次舌。

[self.imageView performSelector:@selector(setImage:) withObject:[UIImage imageNamed:@"tupian"] afterDelay:4.0 inModes:NSDefaultRunLoopMode];

這樣我們就實現(xiàn)了在拖動完之后,在延遲顯示UIImageView兽愤。

3彼念。后臺常駐線程

我們在開發(fā)應用程序的過程中,如果后臺操作特別頻繁浅萧,經(jīng)常會在子線程做一些耗時操作(下載文件逐沙、后臺播放音樂等),我們最好能讓這條線程永遠常駐內(nèi)存洼畅。

- (void)viewDidLoad {
    [super viewDidLoad];
    // 創(chuàng)建線程吩案,并調(diào)用run1方法執(zhí)行任務
    self.thread = [[NSThread alloc] initWithTarget:self selector:@selector(run1) object:nil];
    [self.thread start];
}

- (void) run1{
    NSLog(@"----run1-----");
    // 添加下邊兩句代碼,就可以開啟RunLoop帝簇,之后self.thread就變成了常駐線程徘郭,可隨時添加任務,并交于RunLoop處理
    [[NSRunLoop currentRunLoop] addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
    [[NSRunLoop currentRunLoop] run];
    // 測試是否開啟了RunLoop丧肴,如果開啟RunLoop残揉,則來不了這里,因為RunLoop開啟了循環(huán)芋浮。
    NSLog(@"未開啟RunLoop");
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    // 利用performSelector抱环,在self.thread的線程中調(diào)用run2方法執(zhí)行任務
    [self performSelector:@selector(run2) onThread:self.thread withObject:nil waitUntilDone:NO];
}

- (void) run2{
    NSLog(@"----run2------");
}

經(jīng)過運行測試,除了之前打印的 ----run1----- ,每當我們點擊屏幕镇草,都能調(diào)用 ----run2------ 濒憋。
這樣我們就實現(xiàn)了常駐線程的需求。

4陶夜。runloop監(jiān)聽
5。runloop實現(xiàn)卡頓檢測器
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末裆站,一起剝皮案震驚了整個濱河市条辟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宏胯,老刑警劉巖羽嫡,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肩袍,居然都是意外死亡杭棵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門氛赐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魂爪,“玉大人,你說我怎么就攤上這事艰管∽沂蹋” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵牲芋,是天一觀的道長撩笆。 經(jīng)常有香客問我,道長缸浦,這世上最難降的妖魔是什么夕冲? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮裂逐,結果婚禮上歹鱼,老公的妹妹穿的比我還像新娘。我一直安慰自己卜高,他們只是感情好醉冤,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著篙悯,像睡著了一般蚁阳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸽照,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天螺捐,我揣著相機與錄音,去河邊找鬼。 笑死定血,一個胖子當著我的面吹牛赔癌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播澜沟,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼灾票,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了茫虽?” 一聲冷哼從身側響起刊苍,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎濒析,沒想到半個月后正什,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡号杏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年婴氮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盾致。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡主经,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庭惜,到底是詐尸還是另有隱情旨怠,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布蜈块,位于F島的核電站鉴腻,受9級特大地震影響,放射性物質發(fā)生泄漏百揭。R本人自食惡果不足惜爽哎,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望器一。 院中可真熱鬧课锌,春花似錦、人聲如沸祈秕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽请毛。三九已至志鞍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間方仿,已是汗流浹背固棚。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工统翩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人此洲。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓厂汗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親呜师。 傳聞我的和親對象是個殘疾皇子娶桦,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355

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