一个程序从main函数开始,函数执行完毕之后就会退出,iOS程序也是一样的,但是我们从没看到过iOS程序打开之后直接闪退,肯定是有一些东西阻止了程序的退出,最简单的就是添加一个死循环,RunLoop就是类似于这样的一个死循环,保证你的应用程序不被退出,区别就是RunLoop会在你的程序有事件(点击事件、摇晃事件等)要处理的时候才会去让cpu处理,在程序没有事件处理的时候就让系统cpu休眠。在iOS中,每个线程都有一个RunLoop,但是默认状态下只有主线程的RunLoop是开启的(系统自动帮我们开启),其他线程开启需要以下代码
BOOL isRunning = NO;
while (!isRunning) {
isRunning = [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
currentRunLoop 可以获取当前线程的RunLoop , 循环是为了保证能开启RunLoop(系统繁忙时有可能开启失败)
如果用timerWithTimeInterval来创建NSTimer,我们需要把这个Timer添加到RunLoop才能执行,如果是在子线程,还需要开启这个RunLoop。