Подтвердить что ты не робот

IPhone - когда вызывается dealloc для вызываемого контроллера view?

Я использую UINavigationController для перемещения между представлениями. Когда я перемещаюсь взад и вперед по просмотрам, память, используемая моим приложением, продолжает расти. При размещении инструкций NSLog в методе dealloc для всех контроллеров view я заметил, что он вызывался только для некоторых контроллеров view и не для всех, которые были выписаны.

Например, это последовательность, в которой просматриваются представления MainViewController → viewcontroller1 → viewcontroller2 → viewcontroller3

Теперь в viewcontroller3, если я делаю popToViewController: mainController, dealloc вызывается только для viewcontroller3. Он не вызывается для viewcontroller1 и 2.

Может кто-нибудь скажет мне, почему это происходит.

Обнаружена проблема. Метод dealloc не вызывается, если какая-либо из ссылок, удерживаемых контроллером view, все еще находится в памяти. В моем случае это был объект MPMoviePlayerController, который не был выпущен в viewcontroller1 и viewcontroller2.

4b9b3361

Ответ 1

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

Если вы вернетесь в гамбургер, вы снимите верхнюю булочку (popViewController: вызывает метод dealloc отображаемого представления). Если вы хотите вернуться к нижней булочке, тогда вам нужно выпить гамбургер (dealloc вызывается каждый раз, когда открывается вид).

не уверен, почему на pop для root второй контроллер представления dealloc не будет вызываться, хотя..

гм

Ответ 2

где вы перемещаете свои контроллеры, необходимо будет написать эту строку после pushviewcontroller, [viewControllername release]; то он будет вызывать каждый метод управления Dealloc viewcontroller:)

Ответ 3

Вы также должны иметь в виду, что dealloc не всегда будет работать.

Ответ 4

используйте как [self.navigationController popToRootViewControllerAnimated: YES]; Это сработало для меня... называет все dealloc methos моих 10 контроллеров представления