深入浅出 RunLoop(一):初识
深入浅出 RunLoop(二):数据结构
深入浅出 RunLoop(三):事件循环机制
深入浅出 RunLoop(四):RunLoop 与线程
深入浅出 RunLoop(五):RunLoop 与 NSTimer
深入浅出 RunLoop(六):相关面试题
RunLoop
是通过内部维护的事件循环来对事件/消息进行管理的一个对象;RunLoop
不是一个简单的do...while
循环,它涉及到用户态和内核态之间的切换。事件循环就是对事件/消息进行管理,事件循环可以达到:
mach_msg()
函数来转移当前线程的控制权给内核态/用户态。RunLoop
,main()
函数一执行完,程序就会立刻退出。main()
函数中调用了UIApplicationMain
函数,这个函数内部会启动主线程的RunLoop
;RunLoop
:NSRunLoop
(是CFRunLoopRef
的封装,提供了面向对象的 API)CFRunLoopRef
NSRunLoop
和CFRunLoopRef
都代表着RunLoop
对象NSRunLoop
不开源,而CFRunLoopRef
是开源的:Core Foundation 源码RunLoop
对象的方式:// Foundation [NSRunLoop mainRunLoop]; // 获取主线程的 RunLoop 对象 [NSRunLoop currentRunLoop]; // 获取当前线程的 RunLoop 对象 // Core Foundation CFRunLoopGetMain(); // 获取主线程的 RunLoop 对象 CFRunLoopGetCurrent(); // 获取当前线程的 RunLoop 对象 复制代码
NSTimer
在滑动时停止工作的问题performSelector...
方法Core Foundation 源码
苹果官方文档 RunLoop