2012-04-05 2 views
0

У меня есть приложение на основе навигации, которое переключается между некоторыми ViewControllers. Если я нажму кнопку «goHome», вызывается метод popViewControllerAnimated: и я возвращаюсь на главный экран. Однако есть проблема: метод dealloc не вызван, и все элементы в этом предыдущем представлении будут освобождены. Все элементы анимации/пользовательского интерфейса остаются в памяти. Что мне делать?IOS dealloc никогда не называется

+1

Это утечка. Вам нужно исправить то, что вызывает утечку. Инструмент для утечки инструментов должен помочь. – wbyoung

ответ

1

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

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

+1

ARC не имеет проблем с утечками. Вы просто пишете немного меньше кода. Новички в Obj-C должны начать с MRC, чтобы понять, что происходит в ARC. – Sulthan

+0

Для понимания подсчета ссылок и его оговорок я предлагаю внедрить его вручную на C с большим количеством выходных данных, чтобы вы могли смотреть, что происходит. Цель C без ARC кажется довольно бессмысленной - разрыв между устремлениями Objective C с Cocoa и Grand Central Dispatch в сочетании с ручным удержанием и выпуском вызовов был настолько уродливым парадоксем для пути достаточно долго ... – yeoman

+0

Понимание управления ручным управлением памятью в C только все равно будет недостаточно, есть также эта вещь с соглашениями об именах, которые использует ARC, которые влияют даже на взаимодействие Obj-C/Swift. ARC не является серебряной пулей, но уверен, что ад помогает. – themarketka

1

В вашем UIViewController убедитесь, что ваш dealloc имеет правильную подпись и зовет супер вид последний:

- (void) dealloc { 
    //Release your stuff 
    [super dealloc]; 
} 

также помнить, что при работе с UIViewControllers вам придется иметь дело с памятью в viewDidUnload, а также (Безразлично я действительно обращаюсь к вашей проблеме, но думал, что брошу ее туда).

+0

Это именно то, что я использовал и все еще, ничего. Я поставил NSLog, чтобы проверить его, и он не вызван. – Teo