2014-10-30 1 views
7

В разделе «Постепенное устаревания из NSCell» из AppKit Release Notes for OS X v10.10 говорит:Почему NSCell обескураживает и почему он был введен в первую очередь?

Mac OS X 10,10 делает еще один шаг на пути к возможному устаревания клеток.

Я слышал, что NSCell был введен для оценки производительности. Но тогда почему это обесценивается?

ответ

9

NSCell был введен по соображениям производительности в дни NeXTSTEP на машинах с несколькими мегабайтами памяти, когда полная таблица NSView для каждой ячейки таблицы была недоступной экстравагантности. В iOS представления таблиц были значительно упрощены с помощью представлений, а не ячеек. В OS X 10.7 Apple начала перемещать OS X в одном направлении, и мы, наконец, добираемся туда.

NSCell всегда был большой проблемой на OS X, не в последнюю очередь потому, что он использует NSCopyObject(), one of the most annoying functions NeXT ever wrote. Он также предоставляет один текстовый редактор (NSText), который разделяется между всеми видами ввода текста. Если вы не будете осторожны, это может привести к запутыванию ошибок, когда представления мешают друг другу через этот общий объект. Разделение и дублирование между элементами управления и ячейками всегда были источником беспорядка среди разработчиков OS X.

Когда-то давно это было необходимо, но эти дни давно прошли. В большинстве случаев нам больше не нужно беспокоиться о «накладных расходах на полный подкласс NSView». В частности, поскольку добавление CALayer позволило сделать их намного быстрее.