#iphone #cocoa-touch #ios4 #memory-management
#iPhone #cocoa-touch #ios4 #управление памятью
Вопрос:
У меня есть пользовательский UIView, который загружается через перо внутри UIViewController.
Я весь день боролся с -[UIScrollView retainCount]: сообщение, отправленное в освобожденный экземпляр с ошибкой.
Мой пользовательский метод освобождения подкласса UIView выглядел следующим образом:
-(void)dealloc {
[myScrollView dealloc];
[someProperty dealloc];
[super dealloc];
}
Проблема заключалась в том, что он всегда зависал при [super dealloc] из-за [myScrollView dealloc], предшествующего ему.
Когда я изменил метод на:
-(void)dealloc {
[super dealloc];
[myScrollView dealloc];
[someProperty dealloc];
}
Все работает нормально. Мой вопрос в том, имеет ли значение, вызывается ли [super dealloc] первым или последним? В большинстве примеров я вижу, что он вызывается последним.
Комментарии:
1. Почему вы звоните
retainCount
? Вы никогда не должны вызывать retainCount .
Ответ №1:
[super dealloc]
всегда должен быть последний вызов в dealloc
. Ваша проблема в том, что вы должны вызывать release
другие объекты, а не dealloc
. dealloc
вызывается средой выполнения, когда количество выпусков объекта достигает нуля, ваш код никогда не должен вызывать его напрямую.
Следовательно, ваш код должен выглядеть следующим образом:
-(void)dealloc {
[myScrollView release];
[someProperty release];
[super dealloc];
}