如何提高NSTextStorage的addAttribute性能

时间:2018-05-21 16:07:58

标签: ios swift textkit nstextstorage

我在NSTextStorage中有一个很长的文字(可能是普通的书,比如> 200页)。 我以这种方式为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
}

然后我在pageViewController上将这个容器用于textViews。

我有一些标记为:

func selectTappableWordsFromList(_ list: [PositionWithWord]) {
  self.defaultTextStorage?.beginEditing()

  list.forEach {
    if !self.shouldInterruptCurrentProcesses {
      self.markWordInDefaultTextStorage(positionWithWord: $0)
    } else {
      self.shouldInterruptCurrentProcesses = false
      self.defaultTextStorage?.endEditing()

      return
    }
  }

  self.defaultTextStorage?.endEditing()
}


 func markWordInDefaultTextStorage(positionWithWord: PositionWithWord) {
    let range = NSMakeRange(positionWithWord.position!.start, 
                            positionWithWord.position!.length)

    defaultTextStorage?.addAttributes(defaultAttributes, range: range)
 }

 let defaultAttributes: [NSAttributedStringKey: Any] = [
    .underlineStyle: NSUnderlineStyle.styleSingle.rawValue,
    .underlineColor: UIColor.BookReader.underline
 ] 

问题是:在整个文本存储中标记单词的速度非常慢。书中的页面越多,它的工作就越慢。

还有来自探查器的cpu使用截图。

enter image description here

任何提高逻辑的方法?

0 个答案:

没有答案