Вы release
объект, когда вы больше не интересуетесь им. Это происходит по многим причинам; это может быть потому, что вы закончили с объектом или передали контроль над временем жизни объекта другому объекту. Это может быть потому, что вы собираетесь заменить объект новым экземпляром, а может быть потому, что вы (объект-владелец) вот-вот умрете.
Последнее, похоже, актуально в вашем случае. Вы создаете эти объекты в viewDidLoad
и неоднократно нуждаетесь в них (т.е. добавляете их в ячейки), пока ваш объект больше не функционирует. В этом случае, так же, как вы создаете их в viewDidLoad
, вы можете выпустить их в viewDidUnload
.
Редактировать: я действительно должен упомянуть autorelease
, но в данном случае это не актуально. Управление памятью лучше всего осуществлять с понятием «владелец» - лицо, которое что-то создает (или сохраняет), должно нести ответственность за его удаление (или release
на языке ObjC). autorelease
обрабатывает некоторые случаи, когда вам нужно передать объект другому владельцу, который ранее владел им самостоятельно (обычно через метод return). Если вы являетесь создателем, вы не можете просто release
передать его перед возвратом новому владельцу, поскольку он будет удален до того, как новый владелец сможет заинтересовать его. Тем не менее, вы не можете просто не release
это; это будет течь. Таким образом, система предоставляет большой список объектов, которые она выпустит от вашего имени в будущем. Вы передаете свою release
ответственность за этот список, а затем return
объект новому владельцу. Этот список (пул авто-выпусков) гарантирует, что ваше освобождение произойдет в какой-то момент, но дает новому владельцу возможность заявить об объекте как о своем, прежде чем он будет выпущен.
В вашем случае вы явно заинтересованы в том, чтобы владеть объектами на протяжении всего срока службы вашего контроллера представления - вам необходимо в любое время иметь возможность добавлять их для просмотра ячеек в ответ на перезагрузку данных таблицы. Вы закончите с ними только тогда, когда ваш контроллер представления умрет, поэтому viewDidUnload
(или, возможно, dealloc
) - единственное разумное место для release
их.