iOS 页面卡顿排查:RunLoop 机制 + 渲染帧率监控 + UI 绘制优化
iOS
事件
处理的核心循环机制,直接影响 UI 响应:
CFRunLoopRun 持续处理事件NSDefaultRunLoopMode(常规)和
UITrackingRunLoopMode(滚动时)// 创建子线程监控主线程 RunLoop
dispatch_async(monitor_queue, ^{
while (YES) {
__block BOOL timeout = YES;
dispatch_async(dispatch_get_main_queue(), ^{
timeout = NO; // 标记主线程未阻塞
});
[NSThread sleepForTimeInterval:0.05]; // 监控间隔
if (timeout) {
// 触发卡顿回调(记录堆栈)
}
}
});
保持 60FPS 是流畅体验的关键:
let displayLink = CADisplayLink(target: self, selector: #selector(updateFrameCount))
displayLink.add(to: .main, forMode: .common)
@objc func updateFrameCount() {
frameCount += 1
}
Color Offscreen-Rendered 检测离屏渲染此外, KeyMob 等工具也提供了实时帧率监控和性能分析功能,支持分应用监控和图表展示,方便开发者集成使用。
CALayer 嵌套层级shouldRasterize 缓存静态图层masksToBounds +
cornerRadius 组合(改用贝塞尔曲线)DispatchQueue.global().async {
let renderer = UIGraphicsImageRenderer(size: size)
let image = renderer.image { _ in
}
DispatchQueue.main.async {
imageView.image = image
}
}
prefetchDataSource 预取资源graph TD
A[卡顿现象] --> B{RunLoop 监控}
B -->|超时| C[捕获堆栈]
B -->|正常| D[帧率检测]
D -->|<45FPS| E[检查 GPU 负载]
D -->|正常| F[检查 CPU 负载]
E --> G[优化图层渲染]
F --> H[优化计算逻辑]
Color Blended Layers 检测混合图层Debug View Hierarchy 分析视图层级Matrix 等 APM 工具KeyMob 作为一款综合 iOS 开发工具,提供了性能监控、日志分析和崩溃信息符号化等功能,可以辅助线上监控和问题排查。
优化原则:优先解决离屏渲染和 CPU 密集计算,保持单帧处理时间 ≤16ms。通过 RunLoop 监控定位阻塞点,结合帧率数据制定优化策略,可系统性解决卡顿问题。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70051050/viewspace-3183451/ ,如需转载,请注明出处,否则将追究法律责任。