美文网首页
谈谈你对RunLoop的理解。

谈谈你对RunLoop的理解。

作者: 丶逐渐 | 来源:发表于2016-02-25 00:03 被阅读210次

    一个程序从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。

    相关文章

      网友评论

          本文标题:谈谈你对RunLoop的理解。

          本文链接:https://www.haomeiwen.com/subject/ctzbkttx.html