2009-05-03 47 views
0

我正在研究iPhone的实时语法荧光笔,并且创建了一个自定义的UIView,它接受一个字符串,解析它,然后在其drawRect:方法中突出显示它。我也实现了一个闪烁的光标。但是,它开始有点慢,我认为当我实现多线处理和块处理时,它会减慢速度。但是,我尝试将[formattedTextView setNeedsDisplayInRect:]调用放在我的视图控制器中的一个函数中,然后使用[self performSelectorInBackground:@selector(updateDisplay) withObject:nil]调用单独的线程。现在键盘的响应速度更快,但这似乎是单核处理器上线程的糟糕用法。多线程文本处理的成本/收益

做这样的事情有没有问题?

感谢

回答

1

正如你指出你自己,在单个处理器的多线程不会带来巨大的性能提升,但配备了稳定性和复杂性的惩罚。

在即时语法着色是一个很难的问题,与possibilites酿优化:

  • 你对整个文本应用了一堆的正则表达式的? (坏)还是你解析文本要在一个有效的数据结构像ast?
  • 您是否将彩色绘画限制在可见区域?
+0

我最终删除了后台处理,因为如果连续快速输入很多字符会导致延迟。 至于你的其他要点: - 我正在应用正则表达式到当前可编辑的行。 - 我只通过调用setNeedsDisplayInRect更新当前行:,UIView的其余部分保持着色。 在我看来,减速的主要原因是闪烁的光标(在awakeFromNib中设置CABasicAnimation的CALayer)有什么方法来优化这个动画? 另外,什么是ast?我以前没有听说过,我正在使用NSMutableArray。 – Kyle 2009-05-03 17:33:20

0

我在实时语法高亮

工作你做关键字高亮或者你写了一个BNF解析器?

对于后者,为什么不让它在一个线程中运行; GUI只显示迄今已解码的所有内容的着色。这样你即时更新,但延迟着色。

+0

我正在用正则表达式来做关键字高亮,一个实际的解析器会很好,但我不确定我能写一个。 谢谢, Kyle – Kyle 2009-05-03 17:35:45