Немного интересует управление памятью на ios - PullRequest
1 голос
/ 24 февраля 2012

У меня много viewControllers.

и все они имеют много сохраненных свойств.

Итак, я бы добавил этот код для каждого viewControllers:

- (void)viewDidUnload {
    self.every_retained_property = nil;
    [super viewDidUnload];
}
- (void)dealloc {
    [every_retained_property release];
    [super dealloc];
}

До сих пор в моем приложении все шло хорошо.

Но я слышал это,

a_retained_property = newValue;
// equals to
[a_retained_property release];
a_retained_property = [newValue retain];

так что, если я уже установил a_retained_property в nil в viewDidUnload,

необходимо освободить a_retained_property в dealloc, как то, что я делаю?

Мне просто интересно.

Спасибо!

Ответы [ 3 ]

1 голос
/ 24 февраля 2012

Это не принесет вам никакого вреда.Но

a_retained_property = newValue;

не эквивалентно:

[a_retained_property release];
a_retained_property = [newValue retain];

Вместо этого вы должны использовать:

self.a_retained_property = newValue;
0 голосов
/ 24 февраля 2012

Что сказал Филипп. Также я добавлю, что я пытаюсь «очистить» свои обратные вызовы жизненного цикла представления, чтобы поддерживать только артефакты UIKit, и поддерживать мои объекты модели и контроллера в другом месте.

0 голосов
/ 24 февраля 2012

Причина, по которой вам необходимо освободить переменные экземпляра в методе dealloc, заключается в том, что метод viewDidUnload обычно вызывается только после того, как ваше представление было удалено из памяти из-за нехватки памяти.При нормальных условиях метод никогда не будет вызван, поэтому, если вы не освободите переменные экземпляра в dealloc, при освобождении контроллера представления вы получите утечку памяти.

...