2010-04-11 29 views
2

我有一个分开的NSTextView,我在一个单独的线程中操作(使用performSelectorOnMainThread:withObject:waitUntilDone :)使用选择器replaceCharactersInRange:withString:,setSelectedRange:和insertText :.我正在经历文本闪烁,并且由于NSTextView更新了每个操作的显示,所以性能很差。控制NSTextView更新来处理闪烁和提高速度

有关如何控制何时更新显示的建议,所以我只能在实际需要时更新它?我尝试使用各种组合setNeedsDisplay:NO(来自主线程和后台线程,在更新之前和之后),这似乎被忽略。

在此先感谢任何能提供一些见解的人。

回答

3

我认为你应该操纵文本视图的底层NSTextStorage,而不是直接调用视图的与事件相关的方法。这是Model-View-Controller体系结构的一个非常经典的例子:NSTextView是视图,而NSTextStorage是模型。只要有可能,您想直接操作模型,并让控制器/视图图层按照他们认为合适的方式处理更新视图。

+0

是的。 Cocoa文本系统经过高度优化,如果按照应用的方式使用,您肯定会获得良好的性能。在这种情况下,修改底层'NSTextStorage'对象,它只是'NSAttributedString'的子类,而不是修改视图,这是一种大锤方法。 – 2010-04-12 02:10:56

+0

谢谢!使用NSTextStorage对象以及我修改文本的方式的一些优化的组合完成了这个诀窍。 – stdout 2010-04-14 12:33:40