2011-12-27 3 views
1

На мой взгляд, myViewController должен быть освобожден от времени, когда я возвращаюсь к контроллеру корневого представления с помощью следующего кода, но никогда не вижу, чтобы сообщение об освобождении было получено NSLogged.ViewController никогда не освобождается

Если это сработает, то какую проблему я могу найти в классе myViewController, который может заставить его освободиться, когда я popToRootViewController?

Спасибо.

Следующих вызывается в моей Tableview:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

MyViewController *vc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 

[self.navigationController pushViewController:vc animated:YES]; 

[vc release]; 
} 

UPDATE:

Этого код был совершен, но это был каким-то плохое управление памятью в моих контроллерах настраиваемого представления, что вызвало ни быть освобождено. У меня были некоторые сохраненные свойства, которые следовало назначать вместо этого (или, по крайней мере, так я решил это). См. Комментарии к особенностям.

+0

Когда вы находитесь на другом контроллере представления на навигационном контроллере, если вы находитесь на IOS Simulator Hardware -> Имитация Внимание памяти, а затем проверить его. Контроллер навигации отключит ваш контроллер просмотра (если он не является контроллером корневого представления), если ваше приложение получает предупреждение о памяти. – 0x8badf00d

+1

в коде не было проблем. Вам нужно увидеть код в MyViewController - вы могли бы сохранить контроллер где-нибудь в своих собственных методах. – samfisher

+0

Вызывается Имитация памяти Предупреждение, все еще не освобождение. Я думаю, что я должен проверить свойства myViewController следующим образом. – JaySmith02

ответ

0

Когда вы используете poptoviewcontroller, тогда метод dealloc вызовет самый верхний контроллер вида в контроллере навигации. Вы можете поместить точку останова в методе dealloc вашего текущего контроллера представления, а когда вы вызываете popviewcontroller, тогда ваш метод dealloc вызывается и освобождает все элементы/varaibles, которые вы создали в контроллере представления.

0

@ JaySmith02 прав

это было некоторое плохое управление памятью в моих контроллерах пользовательский вид, что не вызывает ни быть освобожден. У меня были некоторые нераспределенной свойства, которые должны были назначить вместо (или, по крайней мере, именно так я ее решил)

В моем случае преступник был

@property (nonatomic, retain) id<TTSlidingPagesDataSource> dataSource; 

С моей ViewController, когда я писал

slidingPages.dataSource = self 

Я предполагаю, что dataSource сохранил мой номер viewController и сделал круговое удерживание. «Dealloc» моего viewController никогда не вызывался.

Примечание: Под ARC dealloc делает дозвонились. Разница вы не можете назвать [super dealloc]

Решение:

@property (nonatomic, assign) id<TTSlidingPagesDataSource> dataSource; 
Смежные вопросы