Любые объекты, выделенные и / или сохраненные как часть loadView
и / или viewDidLoad
, должны быть освобождены в viewDidUnload
.Выпуск всего, что вы выделяете в viewDidLoad
, легко понять, loadView
немного сложнее, если вы используете NIB.Любое IBOutlet
, которое является свойством, определенным как retain
, будет неявно сохранено как часть loadView
.
Если представление имеет, например, подпредставление, которое является UITextField
, и вы подключаете это представление ксвойство, определенное как:
@property(nonatomic, retain) IBOutlet UITextField* nameField;
Тогда фактическое текстовое поле при загрузке из NIB будет иметь счет сохранения +2.+1 из-за родительского представления и +1 из-за свойства, к которому вы его подключили.Таким образом, его память не освобождается до тех пор, пока не будет освобожден контроллер представления или пока не будет загружена NIB.
К сожалению, viewDidUnload
не вызывается, когда контроллер представления освобождается.Таким образом, вы также должны явно выпустить все свои `IBOutlets здесь.Я использую эту скороговорку, чтобы не забыть выпустить что-нибудь:
-(void)releaseOutlets {
// Set all outlets to nil
}
-(void)viewDidUnload {
[self releaseOutlets];
[super viewDidUnload];
}
-(void)dealloc {
[self releaseOutlets];
// Release anything else.
[super dealloc];
}