最近想要对我维护的 App 做启动优化,找到了这两个视频资料,Optimizing App Startup Time、iOS App Performance: Responsiveness。视频干货很多,涉及到了 iOS 可执行文件的结构、系统是如何启动 App 的等等底层知识,需要慢慢消化。针对其中的一个点,non-fragile ivars offset update
,这个启动流程中的一环,我继续搜索了一些资料,希望可以真的理解这个事情。我将从这个特性是为了解决什么问题、这个特性是如何解决问题的,原理是什么、这个特性有哪些应用等方面做一下总结。还参考了:http://quotation.github.io/objc/2015/05/21/objc-runtime-ivar-access.html。
一、non-fragile ivars 解决了什么问题
解决了二进制的兼容性问题。没有 non-fragile ivars 特性,SuperClass 增删了成员变量,SubClass 必须重新编译才能正常运行。原因是 fragile ivars 环境下,成员变量在对象内存中的偏移量是编译阶段确定的,作为常量 hardcode 到指令中(这一点不确定,求证之后回来 u