我发现 Core Text 在第一代 iPad 上运行时存在一些性能问题。
我使用 Core Text 和基于 OmniGroup 的 OUIEditableFrame
的 UITextInput
协议(protocol)创建了一个可编辑 View 。
当 View 中有相当多的文本(比如 180 行)时,打字/输入会大大滞后,点击一个键通常需要 1-2 秒。
通过将仪器与模拟器结合使用,我能够缩小问题范围并找出花费如此多时间的原因。原来这是因为我每次击键都会重新绘制框架,占用大量时间的是调用 CTFramesetterCreateWithAttributedString
和 CTFramesetterCreateFrame
。
我必须在每次击键时重绘以便更新文本,这意味着调用 CTFramesetterCreateWithAttributedString
和 CTFramesetterCreateFrame
。
有没有其他人遇到过这个问题,如果遇到过,他们是如何解决的?
编辑:
做了一些进一步的调查,结果发现如果属性字符串没有属性,那么一切都绘制得更快而且没有任何延迟。更改字体、颜色或段落样式都会减慢速度。知道这是否与它有关吗?
最佳答案
您可能不应该使用 CTFramesetter
来创建类似 UITextView
的东西。相反,您应该保留一组 CTLine
引用。如果您在断字方面需要帮助,那么您可以使用 CTTypeSetter
,但您只需要在当前插入符处及以下插入行(您仍然会稍微创建和销毁排字机,所以看看你对他们的要求是多少)。
保留 CTLines
数组的一个好处是,如果内存不足,您可以丢弃不需要的那些,稍后再重建它们。只需跟踪每一行的字符范围即可。
关于objective-c - 核心文本性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6062420/