在 iOS 8(和 8.1 beta)下,创建 NSAttributedString 的性能比 7 差很多(2-3 倍)。如果您在同一个视图上使用多个实例,这一点尤其明显,加载 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
UPDATE:
iOS9 再次进行了改进,因此速度并没有完全削弱 UI 交互。不幸的是,它仍然不如 iOS7 下那么快。 (通过演示亲自测试一下!)
在今年(2014 年)的 WWDC 上,我向 TextKit 团队提出了这种行为。具体来说,我详细阐述了我们中的一些人如何需要异步 HTML 解析的支持。他们感到惊讶的是,没有用于异步创建属性字符串的公共 API。
鉴于我们的一些应用程序的核心处理渲染大量 HTML 文本,即使在 iOS 7 上,系统提供的渲染也不太理想。因此,我被告知要提交一个错误;关于此问题提交的错误越多,苹果解决该问题的可能性就越高。
我的建议是使用DT核心文本,它们准确地提供了我们在这个问题上所需要的东西。唯一的其他解决方案就是等待。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)