我正在构建一个应用程序,它依赖于字符串属性来在编辑文本时显示不同类型的数据。然后,某些属性会以不同的方式呈现,基本上在每次按键时,但仅限于行范围内。
此操作是使用带有行对象的简单枚举块完成的,该对象知道其在属性字符串内的范围。
- (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 个字符长度。设置视觉属性(例如背景/前景色)没有太大区别,瓶颈是枚举本身 - 或者可能请求枚举范围?
是否有更智能的方法来检索属性范围,或者我应该放弃当前的逻辑并重新开始?
同样的问题。有找到原因或者解决办法吗