方法 setTextColor:range: 在 NSTextView 上慢得离谱

Method setTextColor:range: on NSTextView is ridiculously slow

我正在 Mac OS X 中创建一个简单的编辑器,我已经到了我的编辑器需要对代码进行一些突出显示的地步,例如注释。

我正在使用 Regex 查找所有评论,我最初认为这很慢。事实证明,它做得相当出色。例如,对于 387 条评论,正则表达式需要 "only" 0.008404 秒才能找到它们和 returns 个 NSRanges 数组。

但是灾难来了。当我尝试使用方法 setTextColor:range: 为我的文本设置不同的颜色时,它完成得非常慢。它需要额外的 9.872964 秒(对于我之前提到的那些 387 条评论),并且当评论数量增加时,它会变得非常快。

所以...有什么方法可以更快地做到这一点吗?也许是 NSAttributedStrings?

我真的很抱歉大家,但是Whosebug给了我关于类似问题的建议(我在搜索时没有找到)。

事实证明,您只需告诉 NSTextViews TextStorage 您将开始进行一些编辑。完成后,您提交这些更改。代码如下:

[textView.textStorage beginEditing];
// do some stuff here
[textview.textStorage endEditing];

现在我 运行 代码有 456 条评论,正则表达式需要 0.013887 秒,着色需要 0.215761 秒,这是惊人的下降!

无论如何,我希望有人会觉得有用。