我正在努力为应用添加一些语法突出显示。在测试课程中,我目前有NSTextView
个textDidChange
通知。与此类似:
-(void)textDidChange:(NSNotification *)notification
{
[self highlightText];
}
突出显示的内容是什么,它从NSTextView
中抓取字符串并创建NSMutableAttributedString
并最终显示字符串。代码与此类似:(我使用ParseKit进行解析。下面的示例只是突出显示代码注释)。
- (void) highlightText
{
NSMutableAttributedString * resultString = [[NSMutableAttributedString alloc] initWithString: inputTextView.string];
PKTokenizer *t = [PKTokenizer tokenizerWithString: inputTextView.string];
[t setTokenizerState: t.quoteState from: '[' to: ']'];
// We want comments
t.commentState.reportsCommentTokens = YES;
[t enumerateTokensUsingBlock: ^(PKToken * token, BOOL * stop)
{
// Comments take presidense.
if(token.isComment)
{
[resultString addAttribute: NSForegroundColorAttributeName
value: [self commentColor]
range: NSMakeRange(token.offset, token.stringValue.length)];
}
}];
// Monospace
[resultString addAttribute: NSFontAttributeName
value: [NSFont userFixedPitchFontOfSize:0.0]
range: NSMakeRange(0, inputTextView.string.length)];
[[inputTextView textStorage] setAttributedString: resultString];
}
现在,如果我正在使用少量文本,这可以正常工作,但我希望在处理大量文本时提高其性能。我对这个问题有两个想法:
有没有人对这方面有任何建议?我错过了另一种方法来做到这一点,还是应该这样做?有没有人可能知道任何样本代码做类似/更好的事情?我正在考虑选择#2选项。
答案 0 :(得分:4)