В методе UIView dealloc вы освобождаете свои свойства ДО или ПОСЛЕ [super dealloc]? - PullRequest
0 голосов
/ 16 апреля 2011

У меня есть пользовательский UIView, который загружается через NIB внутри UIViewController.

Я боролся с - [UIScrollView retainCount]: сообщение отправлено на освобожденный экземпляр Ошибка весь день.

Мой пользовательский метод dealloc подкласса UIView выглядел так:

-(void)dealloc {
    [myScrollView dealloc];
    [someProperty dealloc];
    [super dealloc];
}

Проблема была в том, что всегда сбой на [super dealloc] из-за [myScrollView dealloc], предшествующего ему.

Когда я изменил метод на:

-(void)dealloc {
   [super dealloc];
   [myScrollView dealloc];
   [someProperty dealloc];
}

Все работает нормально. Мой вопрос: имеет ли значение, если [super dealloc] вызывается первым или последним? В большинстве примеров я вижу, что это называется последним.

1 Ответ

8 голосов
/ 16 апреля 2011

[super dealloc] всегда должен быть последним вызовом в dealloc.Ваша проблема в том, что вы должны вызывать release для других объектов, а не dealloc.dealloc вызывается средой выполнения, когда счетчик выпусков объекта достигает нуля, ваш код никогда не должен вызывать его напрямую.

Следовательно, ваш код должен выглядеть так:

-(void)dealloc {
    [myScrollView release];
    [someProperty release];
    [super dealloc];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...