Вопрос или проблема
Мой новый проект использует NSTableView
для отображения тысяч строк.
После реализации NSView
-основанного NSTableView я заметил, что производительность прокрутки слишком низкая, хотя ячейки содержали только простые однострочные NSTextField
.
Я попробовал все доступные на тот момент варианты, чтобы это исправить:
- Реализовал повторное использование ячеек с помощью
makeView(withIdentifier:owner:)
- Установил фиксированную высоту строк
- Снизил сложность иерархии представлений
Но я все равно не смог найти способ.
Тогда я попробовал NSCell
и производительность оказалась отличной.
Поэтому мой вопрос таков:
Приемлемо ли использовать таблицы на основе NSCell
в современном разработке для macOS?
Ответ или решение
В 2024 году разработка с использованием NSTableView
в macOS всё ещё актуальна, и выбор между представлением на основе NSView
и NSCell
имеет свои нюансы, особенно при обработке больших объемов данных.
Про Performance: View-Based vs. Cell-Based
-
Производительность: Вы правильно заметили, что при использовании view-based
NSTableView
могут возникать проблемы с производительностью, особенно когда речь идет о большом количестве строк. Это связано с тем, что создание и усечение представлений (views) требует больше ресурсов, чем работа с ячейками (cells). -
Оптимизация View-Based:
- Переработка представлений: Использование метода
makeView(withIdentifier:owner:)
действительно необходимо для оптимизации, однако, если производительность всё равно оставляет желать лучшего, возможно, стоит проверить методы кэширования или создания более легких представлений. - Фиксированная высота строк: Это хороший подход для упрощения вычислений высоты ячеек, но вместе с тем необходимо контролировать, чтобы ваши представления не перегружали процессор при отрисовке.
- Переработка представлений: Использование метода
-
Сложность иерархии представлений: Чем проще иерархия представлений, тем быстрее будет происходить рендеринг. Убедитесь, что у вас минимальная вложенность иерархий представлений.
NSCell-Based Tables
Использование NSCell
в современных приложениях macOS остаётся приемлемым, особенно если ваши требования к производительности высоки и ваши ячейки содержат простые элементы, как, например, NSTextField
.
-
Производительность: Как вы и отметили, производительность улучшилась при использовании
NSCell
. Ячейки в этом случае легче для отрисовки, чем представления, что делает их идеальным выбором для таблиц с большим количеством строк. -
Гибкость: При использовании
NSCell
вы всё равно можете настраивать внешний вид ячеек, однако у вас будут некоторые ограничения по сравнению с view-based подходом. Тем не менее, для простых ячеек это не должно быть критично. -
Совместимость: Учитывая, что
NSCell
используется во многих классических macOS приложениях, его использование по-прежнему вполне допустимо. Apple не отменял поддержкуNSCell
, и многие разработчики продолжают использовать его для достижения высокой производительности.
Заключение
Чтобы резюмировать, использование NSCell
для таблиц в macOS 2024 года не только допустимо, но и иногда необходимо для того, чтобы обеспечить необходимую производительность, особенно в тех случаях, когда вы работаете с тысячами строк. Если ваши ячейки просты, и производительность важнее гибкости, использование NSCell
будет оправданным выбором.