NSAttributedString 内的慢速属性枚举

问题描述 投票:0回答:1

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

此操作是使用带有行对象的简单枚举块完成的,该对象知道其在属性字符串内的范围。

- (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 个字符长度。设置视觉属性(例如背景/前景色)没有太大区别,瓶颈是枚举本身 - 或者可能请求枚举范围?

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

objective-c macos cocoa nsattributedstring enumeration
1个回答
0
投票

同样的问题。有找到原因或者解决办法吗

© www.soinside.com 2019 - 2024. All rights reserved.