UITextView 上的 NSRegularExpressions 性能

NSRegularExpressions performance on UITextView

我目前正在使用 NSRegularExpressions (regex),我正在构建一个 markdown regex

我认为我更改与 regex 匹配的文本的方法不是最好的方法,原因如下。

我创建了以下示例:

UITextViewDelegate

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {

    regularExpression()

    return true
}

func regularExpression() {
    // Some other regular expressions.... 

    let boldPattern = "\*{2}([\w\d ]+)\*{2}"
    do {
        let regex = try NSRegularExpression(pattern: boldPattern)
        let results = regex.matches(in: str, range: NSRange(str.startIndex..., in: str))

        _ = results.map {
            self.applyAttributes(toRange: [=10=].range, withType: .bold)
        }
    } catch let err{
        print("error:", err.localizedDescription)
    }
}

正如您在上面看到的,为了让我在用户输入时立即更新文本,我目前正在浏览文本,针对每个插入的字符,并分析是否有任何匹配模式(在这种情况下加粗为 ** 一些文本 **);

通过这样做,当我输入 CPU 时,使用率从 3% 增加到 25%,因此我认为这不是最好的方法。

在用户键入时即时应用 NSRegularExpressions 的最佳方法是什么? - 我现在用的是最好的吗?

谢谢

一个非常简单的解决方案是在调用 regularExpression 方法之前检查插入的文本是否包含 *(星号):

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {

    if text.contains("*"){
        regularExpression()
    }

    return true
}