美文网首页
2019-03-10面试题

2019-03-10面试题

作者: chrisLL | 来源:发表于2019-03-10 17:37 被阅读0次

    1、runloop和线程有什么关系?

    总的说来,Run loop,正如其名,loop表示某种循环,和run放在一起就表示一直在运行着的循环。

    实际上,run loop和线程是紧密相连的,可以这样说run loop是为了线程而生,没有线程,它就没有存在的必要。

    Run loops是线程的基础架构部分,Cocoa和CoreFundation都提供了run loop对象方便配置和管理线程的run loop。

    每个线程,包括程序的主线程(main thread)都有与之相应的run loop对象。

    runloop和线程的关系:主线程的run loop默认是启动的, 子线程的runloop默认是不开启的,需要我们自己手动开启循环; 。

    iOS的应用程序里面,程序启动后会有一个如下的main()函数

    也就是我们常说的主循环!!!

    重点是UIApplicationMain()函数,这个方法会为main thread设置一个NSRunLoop对象,这就解释了:为什么我们的应用可以在无人操作的时候休息,需要让它干活的时候又能立马响应。

    对其它线程来说,run loop默认是没有启动的,如果你需要更多的线程交互则可以手动配置和启动,如果线程只是去执行一个长时间的已确定的任务则不需要。

    在任何一个Cocoa程序的线程中,都可以通过以下代码来获取到当前线程的run loop。

    此外还有一点非常重要的就是,runloop执行完毕之后,就会进入休眠  ,  只有在某个情况下触发了,才会再次调用;

    参考链接:《Objective-C之run loop详解》

    相关文章

      网友评论

          本文标题:2019-03-10面试题

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