一個(gè)程序從main函數(shù)開(kāi)始疑务,函數(shù)執(zhí)行完畢之后就會(huì)退出沾凄,iOS程序也是一樣的,但是我們從沒(méi)看到過(guò)iOS程序打開(kāi)之后直接閃退知允,肯定是有一些東西阻止了程序的退出撒蟀,最簡(jiǎn)單的就是添加一個(gè)死循環(huán),RunLoop就是類似于這樣的一個(gè)死循環(huán)温鸽,保證你的應(yīng)用程序不被退出保屯,區(qū)別就是RunLoop會(huì)在你的程序有事件(點(diǎn)擊事件、搖晃事件等)要處理的時(shí)候才會(huì)去讓cpu處理丑勤,在程序沒(méi)有事件處理的時(shí)候就讓系統(tǒng)cpu休眠汛骂。在iOS中,每個(gè)線程都有一個(gè)RunLoop祭犯,但是默認(rèn)狀態(tài)下只有主線程的RunLoop是開(kāi)啟的(系統(tǒng)自動(dòng)幫我們開(kāi)啟)切蟋,其他線程開(kāi)啟需要以下代碼
BOOL isRunning = NO;
while (!isRunning) {
isRunning = [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
currentRunLoop 可以獲取當(dāng)前線程的RunLoop 衡楞, 循環(huán)是為了保證能開(kāi)啟RunLoop(系統(tǒng)繁忙時(shí)有可能開(kāi)啟失敗)
如果用timerWithTimeInterval來(lái)創(chuàng)建NSTimer敦姻,我們需要把這個(gè)Timer添加到RunLoop才能執(zhí)行,如果是在子線程歧杏,還需要開(kāi)啟這個(gè)RunLoop镰惦。