性能优化

iOS App启动优化(一)—— 了解App的启动流程

一、启动优化

主要是启动耗时,处理的主要方式是

代码方面:

  • 移除多余的:有些SDK是仅用来Debug测试的,没必要带到Release(条件编译)
  • 延迟非关键:如广告SDK
  • 分配到子线程处理,并发处理

其他方面:

  • +load
  • 动态库dylib合并

排查工具:Time Profiler

iOS性能启动优化相关问题

二、内存优化

app内存问题.md

  • 及时释放(不要只持有,但不释放,如避免单例持有大对象)

    autorelease

1、内存暴涨(Memory Spike)

大量小对象 → 一次性加载/渲染过多 cell、图片、富文本。(Cell 复用)

少量大对象 → 单个对象占用内存非常大(加载大图/视频,例如单张图片 100MB,或一个大 Data blob)

短时间内创建大量对象或加载大资源,造成内存占用过多,可能引发系统回收甚至崩溃。

  • 原因:循环创建对象、大量数据瞬时加载、大图加载等。
  • 工具检测:Instruments -> Allocations / Memory Usage。
  • 示例:

    JSON 解析时递归错误,不断循环创建对象;

    请求没做分页/单页数量极大(之前遇到为了省去Flutter中列表的数据处理,直接单页请求4000个数据)

    加载大图,大图直接解码显示原始位图,占用内存太大。优化:Downsampling(缩放解码),只解码需要显示的尺寸/缩略图,而不是原图全尺寸。

    1
    解码成位图 (bitmap): 4000 x 4000 图片 (RGBA8888) = 4000 * 4000 * 4 bytes  64 MB

    之前在发布内容时候(Flutter应用)涉及到多视频的压缩

2、内存泄漏(Memory Leak):

  • 原因:未释放的强引用循环、未释放的资源(解决循环引用导致释放不掉的问题)。
  • 工具检测:Xcode Instruments -> Leaks。

内存抖动(Memory Churn)

  • 原因:频繁的内存分配和释放。图片/数据频繁解码滑动列表时,每次都解码同一张图片,没有缓存。
  • 影响:性能下降、电池消耗增加。

APP 被系统 Kill(Jetsam)

  • 原因:使用内存超出系统限制。
  • 检查:控制台日志包含 JetsamEvent。

排查工具:Instruments 的 Leaks 和 Allocations 分析内存泄漏

1、正确的地方使用 reuseIdentifier

2、内存泄漏

1、使用Product-Analyze分析内存泄
利用Product-Analyze分析内存泄露,并不能把所有的内存泄露查出来,因为有的内存泄露是在运行时,用户操作时才产生的。那就需要用到Instruments了。

2、使用Instruments检测定位并解决iOS内存泄露

三、卡顿优化

卡顿监控.md

列表优化.md

四、网络优化

网络框架.md