Где-то я читал, что - относительно низких предупреждений памяти и отказавшись от без видимого вида со всеми его подвидами (= целое перо, я думаю), вы должны сделать это:Зачем писать [anView release], anView = nil; а не [anView release] ;?
-(void)dealloc {
[anView release], anView = nil;
[someImageView release], someImageView = nil;
[super dealloc];
}
, а не
-(void)dealloc {
[anView release];
[someImageView release];
[super dealloc];
}
В чем причина заземления этих указателей на nil (= "no object"), после того как я позвоню в релиз? Позвольте мне угадать: какой-то другой метод мог бы иметь -был вид по какой-то причине (кто-нибудь, например, когда это может произойти?), Тогда происходит операция didReceiveMemoryWarning, и вы отпускаете целое изображение nib +, которое в настоящее время не видно (т.е. в многопользовательском приложении). Как только пользователь захочет снова увидеть этот вид, вы быстро загрузите пинц, а затем: он загружает все виды, соединяет розетки и BANG! Теперь ваше другое видное видение висит без каких-либо указателей, где-то одиноко в кирпиче памяти, что приводит к полной и полной утечке памяти, пока ваше приложение не сработает.
Право/Неправильно?
Нет. Это явно запрещено Apple и является хорошим способом вызвать сбой при некоторых обстоятельствах. См. Http://stackoverflow.com/questions/192721/why-shouldnt-i-use-obective-c-2-0-accessors-in-init-dealloc –
Эта ссылка поднимает хороший момент, но все-таки это плохая идея, если вы используете ее только для свойств readwrite, которые полностью синтезированы? (это означает, что вы не декларируете синтез для свойства и по-прежнему переопределяете геттер или сеттер) – Kevlar
Наверное, сейчас это прекрасно, с полностью синтезированными свойствами. Но Apple не гарантирует, что это разрешено, и рекомендует против него, так что это может сломаться в любом будущем SDK. –