управление обновлениями NSTextView для устранения мерцания и повышения скорости - PullRequest
2 голосов
/ 11 апреля 2010

У меня есть подкласс NSTextView, которым я манипулирую в отдельном потоке (используя executeSelectorOnMainThread: withObject: waitUntilDone :), используя селекторы replaceCharactersInRange: withString :, setSelectedRange: и insertText :. Я испытываю мерцание текста и низкую производительность, поскольку NSTextView обновляет отображение для каждой операции.

Любые предложения о том, как контролировать время обновления дисплея, чтобы я мог обновлять его только тогда, когда это действительно необходимо? Я пытался использовать различные комбинации setNeedsDisplay: NO (как из основного, так и из фонового потоков, до и после моих обновлений), который, кажется, игнорируется.

Заранее спасибо всем, кто может дать некоторое представление.

1 Ответ

3 голосов
/ 11 апреля 2010

Я думаю, что вы должны манипулировать нижележащим NSTextStorage для текстового представления, а не напрямую вызывать связанные с событием методы представления. Это довольно классический пример архитектуры Model-View-Controller: NSTextView - это вид, а NSTextStorage - это модель. Когда бы ни было возможно, вы хотите напрямую манипулировать моделью и позволить слоям контроллера / представления иметь дело с обновлением представления по своему усмотрению.

...