微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NSAttributedString 中的慢属性枚举

如何解决NSAttributedString 中的慢属性枚举

我正在构建一个应用程序,它依赖字符串属性在编辑文本时显示不同类型的数据。然后某些属性会以不同的方式呈现,基本上是在每次按键时,但仅限于行范围。

这个操作是使用一个简单的枚举块和一个行对象来完成的,行对象知道它自己在属性字符串中的范围。

- (void)formatLine:(Line*)line {
    // Line kNows its range inside the text view / attributed string
    [textView.textStorage enumerateAttributesInRange:line.textRange
             options:0
             usingBlock:^(NSDictionary<NSAttributedStringKey,id> * _Nonnull attrs,NSRange range,BOOL * _Nonnull stop) {
                  // Set background etc.
    }];
}

然而,事实证明枚举属性范围非常非常慢,尤其是当 NSMutableAttributedString 很长时,即使枚举范围本身通常只有 100-300 个字符的长度。设置视觉属性(例如背景/前景色)没有太大区别,瓶颈是枚举本身——或者可能请求枚举范围?

是否有更智能的方法来检索属性范围,还是我应该放弃当前的逻辑并重新开始?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。