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