我们都知道启动优化的时候,减少+load
方法能够减少启动时间。
如果+load 方法里的内容很简单,会影响启动时间么?比如这样的一个+load 方法?
+ (void)load
{
printf("123");
}
这段代码编译完之后,这个函数会储存在Mach-O中的TEXT两个段中,__text存函数二进制,cstring存储字符串 123 要执行printf函数,首先需要访问__text触发一次page In 读入物理内存,为了要打印字符串,还需要访问cstring,还会触发一次page In 有很多同学不了解page In,这里介绍一下,首先先要知道mmap mmap 的全称是 memory map,是一种内存映射技术,可以把文件映射到虚拟内存的地址空间里,这样就可以像直接操作内存那样来读写文件。 当读取虚拟内存,其对应的文件内容在物理内存中不存在的时候,会触发一个事件: Page In,把对应的文件内容读入物理内存中。 Page In又做了哪些事情呢? MMU找到空闲的物理内存页面 触发磁盘IO,把数据读入到物理内存 如果是TEXT段的页,要进行解密(iOS13之后不需要解密) 对解密后的页,进行签名验证 为了执行这个函数,系统付出了两个page In的代价,所以一旦load方法过多,会影响启动速度