Does dequeueReusableCellWithIdentifier: вызвать инициализатор в моем подклассе UITableViewCell?

У меня есть подкласс UITableViewController с его прототипными ячейками, расстроенными в раскадровке.

В методе делегата cellForRowAtIndexPath имеется достаточное количество кода, который устанавливает ячейки. Проблема в том, что мне не нужна большая часть, если ячейка просто удалена из пула повторного использования, потому что она уже была выполнена, когда ячейка была удалена в первый раз. Я не могу сделать это в раскадровке, потому что есть некоторые свойства, которые я могу получить только программным способом.

Является ли UITableViewController вызовом инициализатора в моем подклассе UITableViewCell, когда он берет прототип ячейки из раскадровки? Я попробовал (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier, но это, похоже, не является частью процесса.

Ответ 1

Когда экземпляр UITableView вызывает dequeueReusableTileWithIdentifier:, ячейка не повторно инициализируется. Вместо этого в этом вызове UITableViewCell, который выгружен, вызовет -(void)prepareForReuse. Это связано с тем, что повторная инициализация ячейки является дорогостоящей, и если мы можем предоставить гораздо более простой способ для подготовки к ее повторному использованию (eh, eh, get it?), Это сэкономит много работы процессора.

Ergo, если вы используете пользовательские ячейки, переопределите UITableViewCell prepareForReuse.

Ответ 2

Я, вероятно, не правильно сформулировал свой вопрос, но я искал здесь на самом деле (void)awakeFromNib.

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