标题由Martin开头的文章,均由Martin_Joy总结,再次感谢Martin童鞋!
前言
因为最近一直在准备校招,阅读了很多相关的书籍及blog,因为自己没有形成清晰的知识结构,导致越看越乱。无意中和朋友Martin_Joy聊起此事,发现他梳理的知识结构非常清晰,征得Martin的同意后,决定发上来,方便学习之用。由此可见,Martin童鞋是个非常乐于分享的人。在此,表示对他深深的感谢,也希望Martin在iOS开发的道路上越走越远。

runloop基本概念
runloop可以看成和线程是一对一的关系,但是runloop可以进行嵌套。runloop主要用来处理各种事件,能够节省CPU资源,在需要处理的时候唤醒,空闲的时候休眠。
猜想内部实现
function loop() {
initialize();
do {
var message = get_next_message();
process_message(message);
} while (message != quit);
}
唤醒和休眠
线程休眠前,指定用于唤醒我的mach_port,然后去休眠后,系统内核会将线程挂起,处于mach_msg_trap()状态,当其他线程(比如有一个进程在后面控制用户输入,一直在跑)向内核发送mach_msg的时候,内核去mach_port唤醒休眠的线程,休眠线程的trap状态被唤醒,runloop继续干活
实际运用
-
AFNetworking:担心线程提前推出,导致NSOperation无法接受回调,于是作者单独起一个thread,内置一个runloop,回调都由它接收,不占用主线程,也不耗CPU资源。类似于常驻服务的线程。runloop一直监听port,使runloop一直等待,怕他没事干,退出 -
TableView中实现平滑滚动延迟加载图片:利用CFRunLoopMode的特性,可以将图片的加载放到NSDefaultRunLoopMode的mode里,这样在滚动UITrackingRunLoopMode这个mode时不会被加载而影响到。 - 监控卡顿的方法
- iOS 实时卡顿监控
- 简单监测iOS卡顿的demo
- 检测iOS的APP性能的一些方法
- 微信iOS卡顿监控系统
- iOS实时卡顿监控
-
runloop处理大量大图片加载问题 - iOS Fast Scrolling with RunLoop Work Distribution
- 在遇到崩溃的时候,自主处理例如弹出提示等
- 让Crash的App回光返照
- iOS 启动连续闪退保护方案
- 漫谈 iOS Crash 收集框架