iOS 8(および8.1ベータ)では、NSAttributedStringを作成するパフォーマンスは7(2〜3倍)よりもはるかに劣ります。これは、同じビューで複数のインスタンスを使用している場合に特に顕著です。4つの異なるラベルを読み込むと、ユーザーがタップして新しいビューが表示されてから1秒以上の遅延が発生します。
残念ながら、これは舞台裏で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の場合ほど高速ではありません。(デモで自分でテストしてください!)
今年(2014年)のWWDCで、私はこの振る舞いをTextKitチームに持ち込みました。具体的には、非同期HTML解析のサポートが必要な人がいることを詳しく説明していました。彼らは、属性付き文字列を非同期的に作成するためのパブリックAPIがないことに驚いていました。
一部のアプリのコアが大量のHTMLテキストのレンダリングを処理することを考えると、システムが提供するレンダリングはiOS 7でも理想的とは言えません。そのため、バグを報告するように言われました。この問題に関して提出されるバグが多いほど、Appleがこの問題に対処する可能性が高くなります。
私の提案はDTCoreTextを使用することです、それらはこの問題に関して私たち全員が必要とするものを正確に提供します。他の唯一の解決策は待つことです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加