Эмпирическое правило, когда дело доходит до управления памятью iOS:
Для каждого alloc
, retain
, copy
или new
у вас должно быть соответствующее release
или autorelease
.
Вы на самом деле протекаете в нескольких местах. В своем заголовке вы retain
используете объекты даты, а затем в своем методе dealloc вы освобождаете их. Это правильно. Однако В ваших методах assignDate вы не можете выпустить копию или сохранить дату. Пока [NSDate date]
автоматически выпущен, вы сохраняете и копируете их самостоятельно.
Нет никаких причин использовать ваши assignCurrentDate
методы. Вы можете просто сделать что-то вроде следующего в вашем методе init:
self.currentDate1 = [NSDate date];
Вот и все.
Редактировать: (Хорошо, это не это.)
Как отмечает Джим в комментариях:
Сохранение в заголовке означает, что синтезированный установщик для этих свойств сохранит назначенные им объекты. Но если вы посмотрите на методы assign *, вы увидите, что на самом деле только assignCurrentDate3 использует это свойство. Остальные присваивают непосредственно ивару, минуя синтезированный сеттер, поэтому они не сохраняются при назначении.