WWDC2016-406 Optimizing App Startup Time
-- 主要为406的视频内容
理论:
main()
函数执行前发生了什么Mach-O
格式- 虚拟内存基础
- Mach-O二进制文件的加载和准备事项 实践:
- 测量App启动时间
- 优化启动时间
文件类型:
- Executable: 应用的主要二进制文件
- Dylib: 动态链接库(或者是DSO or DLL)
- Bundle: 不能被链接的Dylib,只能在运行时使用
dlopen()
加载的,如 plug-ins
Image: 是一种Executable(或Dylib,Bundle)文件 Framework:包含resources,headers和Dylib的文件夹
Mach-O文件被划分成一些segements,segment的名字均是大写,每个segement又被划分成一些sections
每个segment的大小为page的整数倍,具体页的大小和硬件相关(arm64为16KB,其他的为4KB)
section的大小没有是page的整数倍大小的限制,但section之间不会有重叠区域
Mach-O文件基本都包含三个segments,分别对应__TEXT
,__DATA
,__LINKEDIT
_TEXT
包含Mach header,code和只读的一些常量,只读可执行(-rx)_DATA
_LINKEDIT
优化 App 的启动时间 iOS App从点击到启动 http://ios.jobbole.com/90498/ http://blog.sunnyxx.com/2014/08/30/objc-pre-main/
由App的启动说起 http://www.daizi.me/2016/01/05/iOS%20%E5%90%AF%E5%8A%A8%E6%97%B6%E4%BC%98%E5%8C%96%20(1)/
iOS Dynamic Framework 对 App 启动时间影响实测 iOS瘦身之删除无用的mach-O文件
Macho文件浏览器---MachOView dyld中mach-o文件加载的简单分析 了解iOS上的可执行文件和Mach-O格式 The Nitty Gritty of "Hello World" on OS X
iOS 开发中的『库』(一) Slow App Startup Times
Objective-C 深入理解 +load 和 +initialize Objective-C +load vs +initialize
http://stackoverflow.com/questions/24052386/does-swift-compile-to-native-code https://untitledkingdom.co/blog/obj-c-vs-swift/ http://arstechnica.com/apple/2014/10/os-x-10-10/22/