Почему NSTableView использует NSCell вместо NSView?
Это может быть общее обсуждение вместо реального вопроса. Когда я начал использовать NSTableView и NSOutlineView, я подумал: о, экземпляр NSView может делать почти все. Поэтому я возвращаю экземпляр NSView в моем делегате и источнике данных.
Конечно, это не сработало, и я понял, что NSTableView состоит из экземпляров NSCell, который наследуется непосредственно от NSObject.
Я чувствовал, что может быть важно понять, почему Какао построил NSTableView, основанный на NSCell, но NSView. Но немногие документы объясняют это ясно. Поэтому я перехожу к Stackru. Кто-нибудь знает это? Спасибо заранее!
2 ответа
Вы можете переключиться на представление на основе NSTableView или NSOutlineView в инспекторе
Причина для ячейки на основе ячейки может быть, если вы хотите отображать только строку. Если вы хотите отобразить только строку, было бы напрасной тратой ресурсов на создание целого представления для каждой ячейки. В основном это касается контроля памяти и того, что вам нужно для отображения.
Ответ @d00dle показывает, как использовать табличное представление NSView, но не отвечает на вопрос, почему NSTableView исторически использовали NSCells в первую очередь.
Ответ заключается в том, что NSViews являются тяжелыми объектами и дороги в управлении. NSTableViews обычно требуется много строк и столбцов "похожих на вид" вещей, и если вы наивно добавили их как настоящие NSView, вы не сможете поддерживать отзывчивый пользовательский интерфейс.
Это отражено в хитрости, которую Apple добавила для поддержки таблиц и контурных представлений, поддерживаемых NSView; он создает ограниченное количество NSView и перерабатывает их хитроумными способами, чтобы уменьшить общее количество используемых NSView в любой момент.