2013-06-08 2 views
3

Это может быть общая дискуссия вместо реального вопроса. Когда я начал использовать NSTableView и NSOutlineView, я подумал: о, экземпляр NSView может делать почти все. Поэтому я возвращаю экземпляр NSView в своем делетете и dataSource.Почему NSTableView использует NSCell вместо NSView?

Из couse это не сработало, и я понял, что NSTableView объединяет экземпляры NSCell, которые наследуются непосредственно из NSObject.

Я понял, что может быть важно понять, почему Cocoa построил NSTableView на основе NSCell, но NSView. Но несколько документов ясно объясняют это. Поэтому я перехожу к Stackoverflow. Кто-нибудь знает это? Спасибо вам заранее!

+4

Обратите внимание, что вы можете использовать ячейки 'NSView' вместо ячеек NSCell со времен Lion; см. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/TableView/ViewBasedTables/ViewBasedTables.html. Я считаю, что «NSTableView» раньше не использовал ячейки «NSView» из-за производительности, но я не совсем уверен в этом. –

+2

@Bavarious Правильно на нескольких фронтах; Первоначально NSTableView не использовал представления в качестве ячеек, потому что представления сравнительно * очень дороги. Ячейки - это не что иное, как «эй, рисовать в этом случайном прямоугольнике здесь», не имея собственного контекста рисования. – bbum

+0

@Bavarious Привет, снова! Проблема с производительностью ... Я об этом не думал. Документ, который вы связали, будет хорошим. Ранее я видел [TableViewPlayground] (http://developer.apple.com/library/mac/#samplecode/TableViewPlayground/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010727). Но это было слишком сложно для меня, поэтому я бросил изучать его. Похоже, я должен прочитать его снова. –

ответ

6

Вы можете переключиться на вид на основе NSTableView или NSOutlineView в инспекторе

Change from Cell to View Based

Причина для ячейки на основе клеток было бы, если ваш только хотите отобразить строку. Если вы хотите отобразить только строку, это будет пустой тратой ресурсов, чтобы создать целую точку зрения для каждой ячейки. В основном это касается управления памятью и того, что вам нужно отображать.

4

@ Ответ d00dle показывает, как использовать представление таблицы NSView, но он не отвечает на вопрос о том, почему NSTableViews исторически использовал NSCells в первую очередь.

Ответ: NSViews являются тяжелыми объектами и дорогими в управлении. Для NSTableViews обычно требуется много строк и столбцов «похожих на вид» вещей, и если вы наивно добавили их в качестве реальных NSView, вы не сможете поддерживать отзывчивый интерфейс.

Это отразится на хитрости, которую Apple добавила для поддержки таблиц с поддержкой NSView и общих планов; он создает ограниченное количество NSViews и перерабатывает их умными способами, чтобы уменьшить общее количество используемых NSView в любой момент.

Смежные вопросы