本文总结与runloop相关的知识点。从以下几个方面去分析runloop:
- runloop是什么?有什么作用
- runloop内有哪些事件
- runloop与线程的关系
- runloop的应用
runloop是什么?有什么作用
runloop是什么
答:runloop是一个对象
在Foundation框架中,runloop是一个NSRunloop对象
在CoreFoundation框架中,runloop是一个__CFRunloop结构体
runloop有什么作用
刚才说了,runloop是一个对象,这个对象提供了什么作用呢?
- 作用一:提供了一个函数入口,使得程序不会主动退出。
都说runloop是一个运行循环,那么问题来了:我们如何验证?
我们先来看文档:
翻译如下:
**RunLoop对象处理来自窗口系统、端口对象和NSConnection对象的鼠标和键盘事件等源的输入。RunLoop对象还处理计时器事件。
您的应用程序既不创建也不显式地管理RunLoop对象。每个线程对象(包括应用程序的主线程)都有一个RunLoop对象,根据需要自动为其创建。如果需要访问当前线程的运行循环,可以使用类方法current来访问。
注意,从RunLoop的角度来看,计时器对象不是“输入”——它们是一种特殊类型,这意味着它们在触发时不会导致run循环返回。**
这里似乎没有说runloop使得程序不会主动退出。
我们换一种思路:它是从什么时候执行的入口函数呢?
答案显而易见:main函数
因为程序的入口就是main函数,既然提供了运行循环,肯定是从一开始就执行了入口函数。
翻译如下:
创建应用程序对象和应用程序委托,并设置事件循环
这是UIApplicationMain函数做的事情。
如果我们不执行这个函数呢?
boom!!
程序一运行就结束了。这个结果也很符合正常的逻辑。
结论:我们的应用程序,通过UIApplicationMain函数,设置了运行循环,使得程序不会主动退出
- 作用二: