在 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 下那么快。(使用演示自行测试!)