IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> iOS app的启动优化 -> 正文阅读

[移动开发]iOS app的启动优化

返回上级目录:iOS面试专题一

1.冷启动分为两个阶段:main函数之前和之后

iOS App冷启动优化 - 知乎

2.pre-main阶段

Pre-main阶段,当用户点击App冷启动,系统会做好准备工作,剩余的工作由DYLD动态链接器完成,称为pre-main。在iOS15/macOS12以前,可以通过添加run启动参数arguments DYLD_PRINT_STATISTICS打印启动时间,以后要靠自己的工具类或者timeProfile
Pre-main工作:
1.设置运行环境/环境变量
2.加载共享缓存// iOS特性,从iOS3.1开始,会把系统的动态库抽取出来,如UIKIT,WEBKIT,大大减小app消耗内存
3.实例化主程序
4.加载需要的动态库,根据DYLD_INSERT_LIBRARIES判断
5.链接主程序,rebase()因为从iOS4.3开始使用了ASLR,需要重新定位主程序,bind()对程序二进制和符号表进行绑定
6.链接插入的动态库
7.弱符号绑定
8执行初始化方法,执行所有load方法,这是可以优化的地方
9.查找入口点,执行并返回
请添加图片描述
请添加图片描述

2.1 Load dylibs image:加载动态库

  • 动态链接器dyld

针对这一步的优化:减少非系统库的依赖

2.2 Rebase/Bind image:指针重定位

  • ASLR(address space layout randomization): 地址空间布局随机化
  • 镜像(Mirroring): 是一种文件存储形式,是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像

针对这一步的优化:减少Objc类数量,减少selector数量

2.3 Objc setup:Objc类初始化

这阶段做的事情

  • 读取二进制文件的DATA段的内容,找到与objc相关的信息
  • 注册Objc类
  • 确保selector的唯一性
  • 读取protocol以及category的信息

2.4 initializers:各种初始化

load_images

  • 调用Objc的load方法

针对这一步的优化:懒加载

pre-main阶段具体优化

  • 2.+load方法处理

  • 3.针对减少不必要的库

  • 4.合并功能类似的类和扩展(Category)

  • 5.压缩资源图片

3.main()函数之后

  • swift中不能重写load和initialize方法
    请添加图片描述

mach-O是苹果系统的可执行文件。一般静态库会被集成到主程序的mach-O之中,动态库会被拷贝到BUndle里的framework文件夹中,一般在启动的时候加载,说到启动,就不得不提启动优化了

我的另外的相关博客:
iOS swift中的main函数
iOS 性能优化(一):Improving Your App‘s Performance

参考博客:
iOS 性能优化:优化 App 启动速度 - CSDN

ios启动优化:二进制重排

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:42:07  更:2022-02-26 11:45:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 15:20:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码