7

在 iOS 8(和 8.1 beta)下,创建 NSAttributedString 的性能比 7(2-3x)差很多。如果您在同一个视图上使用多个实例,这一点尤其明显,加载 4 个不同的标签将导致用户点击并出现新视图时的延迟超过一秒。

不幸的是,你甚至不能把它扔到另一个线程中,因为它在幕后使用了 WebKit。我已向 Apple 提交了一个错误,但我需要有关解决方法或更好的实施方法的想法。

在 viewDidLoad 中:

self.labelOne.attributedText = [[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }
                                                     documentAttributes:nil
                                                                  error:&error];

快速示例项目:https ://github.com/BenSS/AttributedStringTest

更新:
iOS9 再次改进,所以速度并没有完全削弱 UI 交互。不幸的是,它仍然没有 iOS7 下那么快。(使用演示自行测试!)

4

1 回答 1

5

在今年(2014 年)的 WWDC 上,我向 TextKit 团队提出了这种行为。具体来说,我详细阐述了我们中的一些人如何需要支持异步 HTML 解析。他们对没有用于异步创建属性字符串的公共 API 感到惊讶。

鉴于我们的一些应用程序的核心处理大量 HTML 文本的渲染,即使在 iOS 7 上,系统提供的渲染也不太理想。所以,我被告知要提交错误;提交的有关此问题的错误越多,Apple 解决该问题的可能性就越高。

我的建议是使用DTCoreText,它们提供了我们在这个问题上所需要的。唯一的其他解决方案是等待。

于 2014-10-09T15:10:24.300 回答