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
.
Получает вызов один раз, когда ячейка удаляется, а не повторно используется. Позволяет мне делать некоторые настройки программно, что нет смысла делать в раскадровке.