我正在使用 Core Text 在 iOS 中创建自己的文本编辑器。几乎所有东西都很好,除了一个例外:当文本文档“大”时,东西真的开始变慢。我发现 iOS 在每次更改时都请求整个文档文本,包括选择更改(至少,当我通知 UITextInputDelegate 选择更改时)。部分问题是我已经优化了我的核心文本代码,将文档拆分为段落并仅呈现更改的段落。但是这样做也会将文档字符串(即 a NSAttributedString
)拆分为单独的“段落对象”。因此,当 iOS 请求整个文本文档时,我必须将所有这些字符串组合成一个字符串,这需要时间和内存。
我的解决方案是为 iOS 提供不正确UITextPosition
的 'beginningOfDocument
和endOfDocument
方法,将这些位置限制在与当前选择相交的段落中。这实际上工作得很好。iOS 现在只请求更改当前段落,这完全消除了减速。
到目前为止,一切都很好,但我有点担心这可能会破坏某些东西。我对此进行了一些测试,没有任何问题,但是文本编辑器可能很难测试(谁知道它是否会在某些边缘条件下中断)。
我有两个问题:
- iOS 是否应该在每次更改时请求整个文档文本?如果不是,那么可能是我的协议方法中的其他方法
UITextInput
返回了错误的值,从而导致 iOS 请求整个文档。 - 有谁知道这是否真的会破坏任何东西?