什么是RunLoop?RunLoop的本质:
Runloop-Demo
RunLoop 的概念:顾名思义,运行循环,在程序运行过程中循环做一些事情。
思考:我们应用程序中的main函数为什么可以保持无退出呢?
image.png 02.png实际上呢,在我们的main函数中会调用UIApplicationMain函数,在这个函数中会启动一个运行循环(也就是我们所说的RunLoop),在这个运行循环中可以处理很多事件,例如屏幕的点击,滑动列表,或者网络请求的返回等等,在处理完事件之后,会进入等待,在这个循环中,并不是一个单纯的for循环或者while循环,而是从用户态到内核态的切换,以及再从内核态到用户态的切换,这里面的等待也不等于死循环,这里面最重要的是状态的切换
Runloop对象
iOS中提供了两个这样的对象:NSRunLoop
和 CFRunLoopRef
CFRunLoopRef
是在 CoreFoundation
框架内的,它提供了纯 C 函数的 API,所有这些 API 都是线程安全的。
NSRunLoop
是基于 CFRunLoopRef
的封装,提供了面向对象的 API,但是这些 API 不是线程安全的。
CFRunLoopRef
的代码是开源的,你可以在这里 下载到整个 CoreFoundation
的源码来查看。
Swift 开源后,苹果又维护了一个跨平台的 CoreFoundation 版本,这个版本的源码可能和现有 iOS 系统中的实现略不一样,但更容易编译,而且已经适配了 Linux/Windows。
网友评论