Skip to content

Latest commit

 

History

History
24 lines (21 loc) · 1.41 KB

iOS成长之路.md

File metadata and controls

24 lines (21 loc) · 1.41 KB

52期 load方法为什么耗时?

我们都知道启动优化的时候,减少+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方法过多,会影响启动速度