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 (将#修改为@)