Я пытаюсь заблокировать свое понимание правильного управления памятью в Objective-C.Объяснение использования `self` во время dealloc?
У меня появилась привычка явно объявлять self.myProperty
, а не только myProperty
, потому что я встречал случайные сценарии, в которых свойство не было бы настроено на ссылку, которую я намеревался.
Теперь я читаю документацию Apple о выпуске IBOutlets
, и они говорят, что все выходы должны быть установлены на nil
во время dealloc
. Итак, я ставлю это на месте, как следует и опытные аварии в результате:
- (void)dealloc {
[self.dataModel close];
[self.dataModel release], self.dataModel = nil;
[super dealloc];
}
Итак, я пытался вынимая «я» ссылки, например, так:
- (void)dealloc {
[dataModel close];
[dataModel release], dataModel = nil;
[super dealloc];
}
Эта вторая система, кажется, работайте, как ожидалось. Тем не менее, он меня немного смущает. Почему бы self
вызвать сбой в этом случае, когда я думал, что self
был довольно доброкачественной ссылкой, более используемой как формальность, чем что-либо еще? Кроме того, если self
не подходит в этом случае, тогда я должен спросить: когда вы должны включить self
ссылки, а когда вы не должны?
Так что так говорят, что, когда вы синтезировать свойства в верхней части вашего реализации, достаточно просто установить его на ноль в методе dealloc? – bigmac
Не используйте self.dataModel = nil, просто используйте [dataModel release] ;. Установка свойства в ноль через аксессуры может привести к срабатыванию уведомлений. Вы не хотите, чтобы какие-либо уведомления срабатывали во время dealloc, поскольку ваш объект находится в процессе уничтожения. –