-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Closed
Labels
Description
Bug 表现
问题的具体描述
如题,最终定位到的原因是 UITextView 频繁设置超长文本导致 CPU 暴涨而卡顿
截图
Bug 现场的界面截图,或者 Xcode 控制台的错误信息截图,有问题的代码截图
注释掉 QMUIConsole 293 行 self.textView.attributedText = string; 就不卡了
如何重现
- 在 QDTableViewHeaderFooterViewController 的 scrollViewDidScroll 加一行打印,(为什么是这里?因为 demo 只有这里有实现 scrollViewDidScroll)
[QMUIConsole log:@"文本长一点不用划得那么累"];
- 来回频繁滑动列表 10 秒以上(log 文本长一点不用划那么久),会发现列表开始有明显卡顿(FPS 开始低于 50),而且越来越卡(因为 logString 越来越长)
- 项目有个 FPS 文本监测到掉帧,简易集成代码如下
QDTableViewHeaderFooterViewController.m.zip
定位问题
- 经排查定位到导致掉帧的代码是 QMUIConsole 293 行 self.textView.attributedText = string;
- 经尝试多种设置方案均无改善,所以这算是 UITextView 设置超长文本性能问题?
- 将 TextView 替换成 TableView 就回归如丝般顺滑了,简易替换代码如下,并无处理 search、highlight 等状态
QMUIConsoleViewController.m.zip
预期的表现
正常情况下,应该是什么表现
看是否有更好的方式解决频繁 log 的问题
其他信息
- 设备: [iPhone XR]
- iOS 版本: [iOS 14.2]
- Xcode 版本: [Xcode 12]
- QMUI 版本: [4.2.1]