2011-01-18 3 views
0

Нужно ли мне звонить release здесь или нет?Управление памятью iPhone

Я Загрузка вид в didSelectRowAtIndexPath в Tableview ...

EventDetailedViewController *eventDetailedViewController=[[EventDetailedViewController alloc]initWithNibName:@"EventDetailedViewController" bundle:nil]; 
     eventDetailedViewController.aEventInfo=aEventInfo; 
     [self.navigationController pushViewController:eventDetailedViewController animated:YES]; 
    // [eventDetailedViewController release]; 
     eventDetailedViewController=nil; 

Когда мне нужно позвонить [eventDetailedViewController release]; и когда не нужно вызывать [eventDetailedViewController release]. didSelectRowAtIndexPath в Tableview ...

EDIT:

У меня есть три вида, когда я выбираю его, он загружает первый наконечник. Сначала он загружает второй файл nib. Со второго он загружает третий файл nib. Когда я вернусь с третьего на второй, сначала мое приложение падает ... Я думаю, что это связано с выпуском моего первого контроллера представления.

+0

Является ли aEventInfo UIEvent? Если это так, свойство aEventInfo EventDetailedViewController лучше [копировать объект события, а не сохранять его) (http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIEvent_Class/Reference/Reference.html#// apple_ref/ОКК/мл/UIEvent). – outis

ответ

0

Поскольку вы не собираетесь использовать eventDetailedViewController (вы устанавливаете его на нуль), вы должны его освободить. Метод pushViewController UINavigationController сохранит объект, чтобы он не был выпущен до тех пор, пока navigationController больше не нуждается в нем.

Установка его на нуль, я считаю, полезна только в том случае, если это свойство неатомное, где установка его в nil приведет к выпуску предыдущего значения. Поскольку это локальная переменная, вы должны ее освободить.

2

Apple memory management rules очень просты: каждый вызов alloc/new/copy */keep должен быть сбалансирован вызовом автоматического/освобождения. Все, что вызывает (объект или блок кода), которое вызывает первое, имеет право собственности; когда владельцу больше не нужен принадлежащий ему объект, отпустите его. Например, self.navigationController сохранит контроллер толкаемого представления (утверждение права собственности) до тех пор, пока контроллер не будет выбит из стека контроллера навигации. Единственное, что осталось от этого простого (-истичного?) Объяснения, - это когда использовать weak references (необходимо для предотвращения retain cycles).

С eventDetailedViewController является локальной переменной, это код, который принадлежит eventDetailedViewController. Поскольку переменная не является статической, переменная будет отброшена, когда блок выйдет, и блок не сможет использовать объект после этого, поэтому объект должен быть выпущен.

+0

@Outis. У меня есть три вида, когда я выбираю контроллер первого вида нагрузки. сперва второй вид его нагрузки со второй его нагрузки третий. когда я вернусь с третьего на второй до первого. моя авария приложения ..... Я думаю, что это связано с выпуском моего первого контроллера представления .... –

+0

@kiran дать код вашего метода dealloc. – Ishu

+0

- (void) dealloc { \t [категоризацияАрхив]; \t [nearbyDetailedViewController release]; \t [eventListController release]; [super dealloc]; } Теперь я добавил его в метод dealloc. –

Смежные вопросы