Как правило, вы хотите, чтобы ваш viewDidUnload
освободил все, что может быть воссоздано в viewDidLoad
, если ваш ViewController
не был освобожден за это время.
В dealloc
вам необходимовыпустить что-нибудь, что все еще принадлежит ViewController.Вы не можете предполагать, что viewDidUnload был вызван первым, поэтому будьте осторожны.
Помните также, что отправка сообщений на nil
не принесет никакого вреда, но есть много вреда от отправки релиза объектам, которые вам не принадлежатили отправив его более одного раза на принадлежащие вам объекты.
Поскольку ваши свойства синтезированы, сохраните, вы можете избежать необходимости отправлять release
самостоятельно и просто использовать установщик, чтобы установить для них значение nil (self.property = nil
), при условии, конечно, что вы нигде не добавляли никаких дополнительных сохранений.
NB В вашем viewDidLoad
вы явно назначили вновь созданный объект для iVar, который синтезировал ваше свойство.Не делай этого! Если другой объект установил свойство между созданием экземпляра и представлением, то он утечет .Используйте _ivar
только тогда, когда вы точно знаете, что это правильно, и вы позаботились о каждом крайнем случае.
TL: DR - используйте self.property = nil
в обоих viewDidUnload
и dealloc
и никогда не назначайте новый объект для _ivar
, если вы сначала не проверили, что он уже nil
или не готовы освободить предыдущее значение.