IOS - UITableViewCell программно или в IB? - PullRequest
0 голосов
/ 28 марта 2011

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

Что меня интересует, так это то, что лучше создать программную ячейку tableView или использовать построитель интерфейса? Их плюсы и минусы каждому?

Ответы [ 3 ]

4 голосов
/ 28 марта 2011

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

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

3 голосов
/ 28 марта 2011

Если в UITableViewCell много UILabels, это может повлиять на производительность.

Попробуйте собрать ячейку в IB, убедитесь, что идентификатор ячейки в IB соответствует идентификатору ячейки, который вы используете в коде для удаления из очереди.

Также убедитесь, что все метки установлены непрозрачными, поскольку это будет способствовать повышению производительности.

После всего этого используйте профилирование с инструментом CoreAnimation на устройстве и попробуйте прокрутить таблицу. Во время прокрутки вы получите чтение FPS - 20 FPS немного изменчиво, но приемлемо, намного ниже, чем действительно изменчиво. Цель будет 30FPS или выше.

Если производительность невелика или если у вас должны быть прозрачные метки из-за используемого фона, рассмотрите возможность использования гибридного подхода. Создайте ячейку в IB, но затем вместо этого файла XIB используйте его в коде в качестве шаблона.

Что бы это значило:

1) При создании ячейки в layoutSubviews ячейки считайте один экземпляр UITableViewCell из xib в статическую переменную.

2) Если вы ориентируетесь на iOS 3.2 или более позднюю версию, для каждой метки в XIB создайте CATextLayer в той же позиции с теми же шрифтами, что и метка (CATextLayers будет рендериться быстрее).

3) Если вы нацеливаетесь на 3.1 или более позднюю версию (не ставьте цель ниже 3.0, если вы не сошли с ума), внутри drawRect для ячейки нарисуйте весь текст для вашей ячейки в позициях, указанных в метке шаблона.

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

0 голосов
/ 28 марта 2011

Похоже, вам лучше строить свои клетки программно.Через IB не так много настроек.Программно вы можете сделать намного больше.Это о плюсах и минусах каждого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...