Если вы используете назначить для вашей собственности, вы» re не вызывает сохранение объекта.
Это означает, что вы обязательно НЕ должны называть выпуск или автореферат!
Ваша линия в вашем dealloc
[someDelegate release];
приведет к сбою в какой-то момент вниз в будущем - вы должны удалить его. Вам не нужно заботиться о назначенных свойствах в методе dealloc.
Ваша линия
[self setSomeDelegate:nil];
не будет течь.
Однако, вы, кажется, [[someDelegate alloc] init]
в методе viewDidLoad
. Это необычно; для делегата нормальным является внешний объект, а не один из них. В вашем случае это не действительно делегат, это всего лишь объект, который что-то делает для вас - вы должны переименовать его и изменить свойство на сохранение (и не забудьте освободить его в dealloc).
В настоящее время, если для вашего свойства установлено значение (назначить), а кто-то другой его устанавливает, вы пропустите свой первоначальный делегат. Если вы используете только делегата внутри этого класса, возможно, это не должно быть свойство вообще? Если вы просто хотите, чтобы иметь возможность читать из-за пределов вашего класса, вы можете быть в состоянии использовать (только для чтения) вместо правопреемника (и изменить [self setSomeDelegate:nil]
к someDelegate=nil;
)
Ваша линия viewDidUnload
, которая устанавливает делегат к нулю снимает вопрос вы поднимаете в вашем втором комментарии - вы удаляете делегат, так к тому времени, вы получите viewDidLoad
снова, ваш делегат уже ноль :)
Отредактировано для отражения исправлений/комментариев Деканов. – fuzzygoat