【问题标题】:controlling NSTextView updates to deal with flicker and improve speed控制 NSTextView 更新以处理闪烁并提高速度
【发布时间】:2010-04-11 19:43:33
【问题描述】:

我有一个子类 NSTextView,我正在使用选择器 replaceCharactersInRange:withString:、setSelectedRange: 和 insertText: 在单独的线程中操作(使用 performSelectorOnMainThread:withObject:waitUntilDone:)。当 NSTextView 更新每个操作的显示时,我遇到了文本闪烁和性能不佳的问题。

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

提前感谢任何可以提供一些见解的人。

【问题讨论】:

    标签: objective-c cocoa nstextview


    【解决方案1】:

    我认为您应该为文本视图操作底层NSTextStorage,而不是直接调用视图的与事件相关的方法。这是模型-视图-控制器架构的一个非常经典的示例:NSTextView 是视图,NSTextStorage 是模型。只要有可能,您就希望直接操作模型,并让控制器/视图层处理他们认为合适的视图更新。

    【讨论】:

    • 是的。 Cocoa 文本系统经过高度优化,如果按照应有的方式使用它,肯定会获得良好的性能。在这种情况下,修改底层的NSTextStorage 对象,它只是NSAttributedString 的子类,而不是修改视图,这是一种大锤的方法。
    • 谢谢!除了对我修改文本的方式进行一些优化之外,结合使用 NSTextStorage 对象就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多