objective-c - 核心文本性能

标签 objective-c ios ipad core-text

我发现 Core Text 在第一代 iPad 上运行时存在一些性能问题。

我使用 Core Text 和基于 OmniGroup 的 OUIEditableFrameUITextInput 协议(protocol)创建了一个可编辑 View 。

当 View 中有相当多的文本(比如 180 行)时,打字/输入会大大滞后,点击一个键通常需要 1-2 秒。

通过将仪器与模拟器结合使用,我能够缩小问题范围并找出花费如此多时间的原因。原来这是因为我每次击键都会重新绘制框架,占用大量时间的是调用 CTFramesetterCreateWithAttributedStringCTFramesetterCreateFrame

我必须在每次击键时重绘以便更新文本,这意味着调用 CTFramesetterCreateWithAttributedStringCTFramesetterCreateFrame

有没有其他人遇到过这个问题,如果遇到过,他们是如何解决的?


编辑:

做了一些进一步的调查,结果发现如果属性字符串没有属性,那么一切都绘制得更快而且没有任何延迟。更改字体、颜色或段落样式都会减慢速度。知道这是否与它有关吗?

最佳答案

您可能不应该使用 CTFramesetter 来创建类似 UITextView 的东西。相反,您应该保留一组 CTLine 引用。如果您在断字方面需要帮助,那么您可以使用 CTTypeSetter,但您只需要在当前插入符处及以下插入行(您仍然会稍微创建和销毁排字机,所以看看你对他们的要求是多少)。

保留 CTLines 数组的一个好处是,如果内存不足,您可以丢弃不需要的那些,稍后再重建它们。只需跟踪每一行的字符范围即可。

关于objective-c - 核心文本性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6062420/

相关文章:

ios - 不使用 center 属性移动 UIImageView

ios - 将 Zip 文件添加到项目并获取位置

objective-c - NSTextView(在 NSScrollView 内部)-我如何知道是否需要滚动条?

ios - react native 分支非分支链接始终

iphone - UITapGestureRecognizer 识别为 UILongPressGestureRecognizer

ipad - 在 iPad 的 CSS 中使用媒体查询

objective-c - 在 Xcode 中使用 git 时,UserInterfaceState.xcuserstate 未提交

iOS:我的问题是与其他人询问的终止模式下的背景位置跟踪有什么不同

ios - 如何在 iOS 7 上像 iPad appstore 一样进行 View 转换

iphone - iPad/iPhone 离线应用程序缓存最大尺寸