首页
首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
iOS 启动优化
vony
创建于2022-03-19
订阅专栏
iOS启动优化~ 主要的原理是二进制重排~ 小白从零开始手把手教学~ 伸手党直接看末尾~ 欢迎交流指导~
等 16 人订阅
共8篇文章
创建于2022-03-19
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
iOS App启动优化(一):检测启动时间
冷启动:指APP被后台kill后重新启动APP,这种启动方式叫做冷启动。 热启动:APP的状态由running切换为suspend,APP 没有被kill仍然在后台运行。再次把APP切换到前台,这种启动方式叫热启动。 Xcode 中提供了测量 pre-main 的时间 Edit…
iOS App启动优化(二):物理内存和虚拟内存
内存是分页管理的,映射表不能以字节为单位,是 以页为单位。 早期的计算机不断启动应用,到达一定数量以后会报错,应用无法正常运行,必须先关闭前面的部分应用才能继续开启。 这是因为早期计算机没有虚拟地址,一旦加载都会 全部加载到内存中 。一旦物理内存不够了,那么应用就无法继续开启。…
iOS Link Map File 文件说明
Link Map File 直译为 链接映射文件,是 Xcode 生成可执行文件时一起生成的文本,用于记录链接相关信息。 Xcode 在生成可执行文件的时候默认情况下不生成该文件。 Mach-O 文件中的虚拟地址最终会映射到物理地址上。这些地址被分成不同的Segement: _…
iOS App启动优化(三):二进制重排
我们可以看到图中项目的Page Fault 数量并不多,这是因为当前项目是一个demo,代码和文件都极少。当代码多起来的话,Page Fault的 数量和加载耗时都会随着代码增加而增加。 二进制重排 可以很好优化这个问题,其中心思想是重新排列 方法符号的顺序, 使启动的相关方法…
iOS App启动优化(四):编译期插桩 && 获取方法符号
编译器插桩就是在代码编译期间修改已有的代码或生成新代码。 编译期时,在每一个函数内部二进制源数据添加 hook 代码来实现全局 hook 效果。 说白了我们要跟踪到 每个方法的执行,从而获取到启动时 方法执行的顺序,然后再按照这个顺序去编写order file。 文档是个好东西…
iOS App启动优化(五):收集符号 && 生成 Order File
启动的相关方法可能在不同的线程执行,如果我们用一个数组直接收集这些符号,会出现线程问题。 听到多线程问题立马想到锁,但是这里因为锁耗费性能比较多所以不推荐使用。建议使用原子队列解决这个问题。 原子队列是栈结构,通过 队列结构 + 原子性 保证顺序。 启动的时候方法执行,__sa…
iOS App启动优化(六):实用党直接看这里
添加到启动最早的那个 ViewController 即可。
iOS 获取启动时间
之前Xcode更新以后获取不到系统时间 答应给代码来着 结果一直有事情在忙,今天才贴,不好意思 LaunchTimer.h & LaunchTimer.m 直接复制可用