3

内部にNSTextStorage長いテキストがあります (本で 500 ページ、現在のフォントのデバイスで 9000 ページ以上)。このテキストを textcontainers に次のように配布しています。

let textStorageLength = defaultTextStorage?.length ?? 0
while layoutManager!.textContainer(forGlyphAt: textStorageLength - 1, 
                                   effectiveRange: nil) == nil {
  let textContainer = NSTextContainer(size: textContainerSize)
  layoutManager!.addTextContainer(textContainer)
  pagesCount += 1
}

問題は、このすべてのコンテナなどを初期化するのに長い時間がかかることです.私はすでにコードを使用から変更するなどのいくつかの改善を行っています.

while lastRenderedGlyph < layoutManager!.numberOfGlyphs {

lastRenderedGlyph = NSMaxRange(layoutManager!.glyphRange(for: textContainer))

cz それははるかに遅く動作しています。

では、他にどのような改善を行うことができますか? iPhone 7 では初期化に約 7 秒、iPhone 5s では 20 秒以上かかります。

時間プロファイラーは、ほとんどの場合、insertTextContainer 関数 (addTextContainer) を取得していることを示しています。

助言がありますか?

4

1 に答える 1