iOS面试题:App启动过慢,你可能想到的因素有哪些?

1. App启动过程

  1. 解析Info.plist
  • 加载相关信息,例如如闪屏
  • 沙箱建立、权限检查
  1. Mach-O加载
  • 如果是胖二进制文件,寻找合适当前CPU类别的部分
  • 加载所有依赖的Mach-O文件(递归调用Mach-O加载的方法)
  • 定位内部、外部指针引用,例如字符串、函数等
  • 执行声明为attribute((constructor))的C函数
  • 加载类扩展(Category)中的方法
  • C++静态对象加载、调用ObjC的 +load 函数
  1. 程序执行
  • 调用main()
  • 调用UIApplicationMain()
  • 调用applicationWillFinishLaunching

2、影响启动性能的因素

  1. main()函数之前耗时的影响因素
  • 动态库加载越多,启动越慢。
  • ObjC类越多,启动越慢
  • C的constructor函数越多,启动越慢
  • C++静态对象越多,启动越慢
  • ObjC的+load越多,启动越慢
  1. main()函数之后耗时的影响因素
  • 执行main()函数的耗时
  • 执行applicationWillFinishLaunching的耗时
  • rootViewController及其childViewController的加载、view及其subviews的加载

另外参考一下今日头条的启动优化方案

针对于今日头条这个App我们可以优化的点如下:

  • 纯代码方式而不是storyboard加载首页UI。
  • 对didFinishLaunching里的函数考虑能否挖掘可以延迟加载或者懒加载,需要与各个业务方pm和rd共同check 对于一些已经下线的业务,删减冗余代码。
  • 对于一些与UI展示无关的业务,如微博认证过期检查、图片最大缓存空间设置等做延迟加载。
    对实现了+load()方法的类进行分析,尽量将load里的代码延后调用。
  • 上面统计数据显示展示feed的导航控制器页面(NewsListViewController)比较耗时,对于viewDidLoad以及viewWillAppear方法中尽量去尝试少做,晚做,不做。

更多:iOS面试题合集

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一个项目做的时间长了,启动流程往往容易杂乱,库也用的越来越多,APP的启动时间也会慢慢变长。本次将针对iOS...
    酱油瓶2阅读 3,547评论 0 12
  • 如何优化iOS App的启动性能 第一部分科普了一些和App启动性能相关的前置知识第二部分主要讲如何定制启动性能的...
    百事小武阅读 673评论 0 2
  • 前言 最近和公司iOS小组伙伴讨论准备对各自手上的产品做一次优化,确实对比很多产品来看,(支付宝,淘宝,几乎1~2...
    Cingjin阅读 1,831评论 0 7
  • 一排排,一列列 都一样 短松也哀挽悲伤 不见生长 最终的归宿就在这一小方 天地之间再无牵挂的一小方 火苗变得异常玄...
    斓乔阅读 416评论 0 6
  • 流苏:一直不求甚解地喜欢尼采的作品,感觉他的作品像一句句箴言,很有趣味。但读海德格尔的《尼采》,却觉得有些乏味晦涩...
    雨幕流苏阅读 617评论 2 4