runloop相关小结

本文总结与runloop相关的知识点。从以下几个方面去分析runloop:

  • runloop是什么?有什么作用
  • runloop内有哪些事件
  • runloop与线程的关系
  • runloop的应用

runloop是什么?有什么作用

runloop是什么

答:runloop是一个对象
在Foundation框架中,runloop是一个NSRunloop对象
在CoreFoundation框架中,runloop是一个__CFRunloop结构体

runloop有什么作用

刚才说了,runloop是一个对象,这个对象提供了什么作用呢?

  1. 作用一:提供了一个函数入口,使得程序不会主动退出。
    都说runloop是一个运行循环,那么问题来了:我们如何验证?
    我们先来看文档:
    WeChatabfcacca345bdba5516fa6f4cf3ddbca.png

    翻译如下:
    **RunLoop对象处理来自窗口系统、端口对象和NSConnection对象的鼠标和键盘事件等源的输入。RunLoop对象还处理计时器事件。

您的应用程序既不创建也不显式地管理RunLoop对象。每个线程对象(包括应用程序的主线程)都有一个RunLoop对象,根据需要自动为其创建。如果需要访问当前线程的运行循环,可以使用类方法current来访问。

注意,从RunLoop的角度来看,计时器对象不是“输入”——它们是一种特殊类型,这意味着它们在触发时不会导致run循环返回。**

这里似乎没有说runloop使得程序不会主动退出。

我们换一种思路:它是从什么时候执行的入口函数呢?
答案显而易见:main函数
因为程序的入口就是main函数,既然提供了运行循环,肯定是从一开始就执行了入口函数。

WeChatbbef490a8acc459d79378a63b20b0b65.png

翻译如下:
创建应用程序对象和应用程序委托,并设置事件循环
这是UIApplicationMain函数做的事情。
如果我们不执行这个函数呢?
WeChat04bc9a127b036edf9baf89fa3d54ee4a.png

boom!!
程序一运行就结束了。这个结果也很符合正常的逻辑。
结论:我们的应用程序,通过UIApplicationMain函数,设置了运行循环,使得程序不会主动退出

  1. 作用二:
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,793评论 1 32
  • 翻译来源: RunLoops Run Loops RunLoops是与线程紧密相关的基础架构的一部分,简称运行循环...
    AlexCorleone阅读 3,666评论 0 1
  • RunLoop的定义与概念RunLoop的主要作用main函数中的RunLoopRunLoop与线程的关系RunL...
    __silhouette阅读 4,572评论 0 6
  • 目录: App启动原理 RunLoop 的概念 RunLoop 与线程的关系 RunLoop 对外的接口 RunL...
    jiodg45阅读 4,332评论 0 6
  • RunLoop 的概念一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。如果我们需要一个机制,让线程...
    城市之光阅读 4,101评论 0 1