2010-04-11 28 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