Если в 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 для ячейки нарисуйте весь текст для вашей ячейки в позициях, указанных в метке шаблона.
В целом, хотя сделать метки непрозрачными, вероятно, будет достаточно, если вы правильно используете ячейки (убедитесь, что они снимаются с очереди, как и следовало ожидать).