将 NSAttributedString 分配给 UILabel 很慢?

Posted

技术标签:

【中文标题】将 NSAttributedString 分配给 UILabel 很慢?【英文标题】:Assigning NSAttributedString to UILabel is slow? 【发布时间】:2016-12-28 13:16:31 【问题描述】:

我一直在尝试解决出现问题的表格视图滚动性能。通过 Instrument 的 Time Profiler 运行它表明将 NSAttributedString 设置为 UILabel 花费了相当多的时间。这是一个已知问题吗?如果是这样,是否有解决方法?

我看到一些报告说,NSAttributedString 在 ios8 上的创建速度非常慢,在 iOS9 上有所改进,但是将它设置为包含 UI 元素的速度是否也很慢? NSAttributedString performance is worse under iOS 8

以下是我的配置文件的屏幕截图。请注意,视图模型不会动态创建属性字符串,因此您看到的成本纯粹来自分配。当然,UILabel 可能会执行昂贵的操作,我不知道如何解决。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

在此方法的顶部,您可以检查单元格是否仅配置一次。滚动时单元格正在重用,因此您可以多次使用相同的视图模型配置单元格,这不需要。代码如下所示

guard self.viewModel !== viewModel else  return 

或 将 viewModel.profileInformation.attributedText 与标签处的值进行比较。

【讨论】:

以上是关于将 NSAttributedString 分配给 UILabel 很慢?的主要内容,如果未能解决你的问题,请参考以下文章

将 NSAttributedString 添加到 CloudKit

将 NSColor 从 NSAttributedString 转换为 UIColor

如何将 HTML 的 CSS 添加到 NSAttributedString?

NSAttributedString:将图像适合容器

富文本常用封装(NSAttributedString)

将 HTML 字符串转换为 NSAttributedString 时运行存档时崩溃