Мой вопрос: когда используется release и когда используется dealloc?
Спасибо
Ответ 1
Никогда не вызывайте dealloc за исключением [super dealloc] в конце вашего класса dealloc. Метод release отказывается от права собственности на объект. Когда объект Cocoa больше не имеет владельцев, он может быть освобожден - в этом случае ему будет автоматически отправлено сообщение dealloc.
Если вы собираетесь запрограммировать Cocoa, вам необходимо прочитать Руководство по управлению памятью. Это невероятно просто, как только вы преодолеете начальный горб, и если вы не понимаете, что в этом документе, у вас будет много тонких ошибок.
Ответ 2
Оператор dealloc в вашем примере вызывается, когда счетчик объектов остается равным нулю (через объект, отправляющий его сообщение о выпуске).
Поскольку он больше не нужен, он очищается, отправляя сообщение release на объекты, на которые он держится.
Ответ 3
Вы никогда не должны явно вызывать dealloc (если только он не был отменен в методе dealloc, но это единственное исключение). Objective-C обрабатывает управление памятью посредством подсчета ссылок, поэтому вы просто должны соответствовать вашим allocs/сохраняет с релизами/автореализациями и позволить объекту деконструировать себя.