在iOS 8下,NSAttributedString性能更差

Ben*_*Ben 7 objective-c nsattributedstring ios ios8 ios9

在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];
Run Code Online (Sandbox Code Playgroud)

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

更新:
iOS9再次改进了东西,因此速度并没有完全破坏UI交互.不幸的是,它还没有像iOS7那样快.(用演示自己测试!)

Dan*_*sko 5

在WWDC今年(2014年),我将这一行为与TextKit团队联系起来.具体来说,我正在详细阐述我们中的一些人如何需要支持异步HTML解析.他们感到惊讶的是,没有异步创建属性字符串的公共API.

鉴于我们的某些应用程序的核心处理渲染大量HTML文本,即使在iOS 7上,系统提供的渲染也不太理想.因此,我被告知要提交错误; 关于这个问题提出的错误越多,苹果解决它的可能性就越高.

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