什么是线程
线程就像是工厂的流水线负责任务的开始和结束,每一个方法就像是流水线上的工人负责处理从流水线上过来的任务.负责管理线程的就是工厂的管理员(CPU).管理员为了节约电量在流水线没有工作的时候会关闭流水线.而CPU则会在线程执行完一次任务后销毁线程.
RunLoop
关于线程的说明网上有更详细的资料,RunLoop也有很多的说法,这里说下关于我自己的理解.
线程任务结束后就被销毁.如果主线程被销毁整个程序也就走到了声明的尽头,所以为了不让主线程退出,我们需要给主线程装上马达,让他一直处于运行状态.这样主线程就不会退出.当需要处理事件的时候程序才能够响应.
RunLoop的作用
- 保证线程不被销毁
- 分发任务交给线程处理
用代码解读RunLoop
do {
if (NSDefalutRunLoopMode) {
// 执行默认模式下的事件
// 执行NSRunLoopCommonModes模式下的事件
}
if (UITrackingRunLoopMode) {
// 执行UI模式下的事件
// 执行NSRunLoopCommonModes模式下的事件
}
if (UIInitializationRunLoopMode) {
// 执行系统事件
}
} while (YES);
RunLoop就是一个do...while,它一直在遍历自身内容部的方法,只执行当前模式下的方法,默认情况下是NSDefalutRunLoopMode模式.当scrollView滚动时切换到UITrackingRunLoopMode(滚动滑动块不会切换模式),当收到系统事件则切换到UIInitializationRunLoopMode模式.当这两种模式都没有任务时自动切换到NSDefalutRunLoopMode模式下.
NSRunLoopCommonModes模式比较特殊,无论是NSDefalutRunLoopMode还是UITrackingRunLoopMode模式都会执行这个模式中的事件.
粗浅的理解,如果想更详细的了解RunLoop请看下面的连接
http://blog.ibireme.com/2015/05/18/runloop/