RunLoop是通过内部维护的事件循环来对事件/消息进行管理的一个对象;RunLoop不是一个简单的do...while循环,它涉及到用户态和内核态之间的切换。事件循环就是对事件/消息进行管理,事件循环可以达到:
mach_msg()函数来转移当前线程的控制权给内核态/用户态。RunLoop,main()函数一执行完,程序就会立刻退出。
而我们的 iOS 程序能保持持续运行的原因就是在main()函数中调用了UIApplicationMain函数,这个函数内部会启动主线程的RunLoop;RunLoop:
① Foundation:NSRunLoop(是CFRunLoopRef的封装,提供了面向对象的 API)
② Core Foundation:CFRunLoopRef NSRunLoop和CFRunLoopRef都代表着RunLoop对象NSRunLoop不开源,而CFRunLoopRef是开源的:Core Foundation 源码 RunLoop对象的方式: // Foundation
[NSRunLoop mainRunLoop]; // 获取主线程的 RunLoop 对象
[NSRunLoop currentRunLoop]; // 获取当前线程的 RunLoop 对象
// Core Foundation
CFRunLoopGetMain(); // 获取主线程的 RunLoop 对象
CFRunLoopGetCurrent(); // 获取当前线程的 RunLoop 对象NSTimer在滑动时停止工作的问题performSelector...方法