Part 4 — 性能优化

一、性能优化整体认知(先建立高度)

✅ Q61:iOS 性能优化主要分哪几类?
iOS 性能优化主要分为四大方向:

1️⃣ 启动性能
2️⃣ 渲染性能(卡顿/FPS)
3️⃣ 内存性能
4️⃣ 网络与 IO 性能

本质是 CPU、GPU、Memory、IO 资源竞争优化。

二、卡顿优化(★★★★★ 必问)

✅ Q62:什么是卡顿?
iOS 屏幕刷新率为 60Hz(或 120Hz),
每帧必须在 16.67ms 内完成。
超过时间 → 掉帧 → 卡顿

✅ Q63:如何监控卡顿
通过 RunLoop Observer + 主线程心跳检测:

  • 监听 RunLoop 状态:
    kCFRunLoopBeforeSources
    kCFRunLoopAfterWaiting
  • 记录时间差
  • 超过阈值(如 100ms)认为发生卡顿

高级补充(加分):
结合 stack trace 采样
上报后台分析

✅ Q64:卡顿常见原因?

  • CPU 问题
    主线程大量计算
    JSON 解析
    layout 计算
  • GPU 问题
    离屏渲染
    -过度透明
  • IO 问题
    主线程读写文件
    图片解码

✅ Q65:如何定位卡顿?

复现
↓
FPS 监控
↓
Time Profiler
↓
Main Thread Call Tree
↓
定位耗时函数

三、列表优化(UITableView / SwiftUI 必问)

✅ Q66:列表为什么会卡?

1️⃣ 频繁 layout
2️⃣ 图片解码
3️⃣ 主线程计算
4️⃣ 离屏渲染
5️⃣ cell 重用不当

✅ Q67:列表优化方案?

  • CPU 优化
    高度缓存
    预计算 layout
  • GPU 优化
    避免透明视图
    减少圆角
  • IO 优化
    图片异步解码
    图片缓存

主线程只做 UI。

✅ Q68:为什么图片会导致卡顿?
因为:
图片解码发生在主线程。
JPEG/PNG → Bitmap 是耗 CPU 操作。
优化:
后台解码
Downsampling

四、离屏渲染(面试超级高频)

✅ Q69:什么是离屏渲染?
GPU 在屏幕外创建 buffer,再合成显示。

  • 增加:
    GPU 内存开销
    上下文切换

✅ Q70:哪些操作触发离屏渲染?

  • 必须能一口气说:
    cornerRadius + masksToBounds
    shadow
    group opacity
    mask

✅Q71:如何优化圆角?
CAShapeLayer
预渲染图片
shouldRasterize(谨慎)

五、启动优化(★★★★★ 大厂最爱

Q72:App 启动阶段划分?

Pre-main
↓
main
↓
首屏渲染

✅ Q73:Pre-main 做了什么?

  • 必须说:
    dyld 加载 dylib
    runtime 初始化
    +load 执行

✅ Q74:如何优化启动时间?

  • 减少 dylib
    合并 framework
  • 减少 +load
    改 initialize
  • 延迟初始化
    lazy load
  • 异步非关键任务
    首屏优先原则。

六、内存优化(高级区)

✅ Q75:如何检测内存泄漏?
Xcode Memory Graph
Instruments Leaks
Allocations

✅ Q76:内存暴涨常见原因?
图片未释放
循环引用
大对象缓存
autoreleasepool 未释放

✅ Q77:如何优化图片内存?

  • 必须说:
    Downsample
    WebP
    按需加载
    图片缓存淘汰策略

七、Crash 优化

✅ Q78:如何降低 Crash 率?

Crash 收集
↓
分类统计
↓
Top N 修复
↓
灰度验证
  • 工具:
    崩溃符号化
    堆栈分析

✅ Q79:常见 Crash 类型?
EXC_BAD_ACCESS
数组越界
KVO
多线程问题

八、性能体系

客户端监控:
- FPS
- 卡顿
- 启动时间
- 内存
- Crash

↓
数据上报

↓
后台聚合分析

↓
版本对比 & 预警

性能优化不是一次行为,而是持续监控体系。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 面试题引发的思考: Q: 列表卡顿的原因?如何优化? 卡顿主要是因为在 主线程 执行了 比较耗时 的操作。 Q: ...
    hazydream阅读 522评论 0 1
  • 原创:知识点总结性文章创作不易,请珍惜,之后会持续更新,不断完善个人比较喜欢做笔记和写总结,毕竟好记性不如烂笔头哈...
    时光啊混蛋_97boy阅读 801评论 0 6
  • 最近一段时间经常遇到关于iOS性能优化、卡顿优化的问题,今天在这里总结一下。一般困扰我们的性能优化的问题一般是你在...
    OnlyFunny阅读 3,483评论 0 9
  • 那么为什么会出现卡顿 为了解释这个问题首先需要了解一下屏幕图像的显示原理。首先从 CRT 显示器原理说起,如下图所...
    赵哥窟阅读 574评论 0 0
  • 本文源自本人的学习记录整理与理解,其中参考阅读了部分优秀的博客和书籍,尽量以通俗简单的语句转述。引用到的地方如有遗...
    水中的蓝天阅读 7,420评论 0 28

友情链接更多精彩内容