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