Правильный способ выгрузки / перезагрузки View Controller - PullRequest
4 голосов
/ 13 апреля 2011

Я новичок в iOS, и мне интересно, как правильно реализовать выгрузку / перезагрузку контроллера представления.

Прямо сейчас у моего приложения есть NavigationController с MainMenuViewController (пользовательский контроллер представления), настроенный в качестве корневого контроллера представления. В течение срока службы приложения новые контроллеры ViewControl помещаются в контроллер навигации. Это работает нормально, соответствующие ViewControllers запускаются (из NIB) при первом их перемещении в стек.

Однако теперь я хочу выгрузить один конкретный ViewController, когда он извлечен, а затем перезагрузить его автоматически при повторном нажатии.

Я добавил [self release] к этому ViewControllers viewDidDisappear:, и он выгружается, но когда я пытаюсь снова выдвинуть представление, я получаю сообщение об ошибке экземпляра dealloc и сбое. Поэтому мои вопросы:

  1. Это правильный способ выгрузить отключенный ViewController?
  2. Как проверить, загружен данный ViewController или нет?
  3. Как заставить перезагрузить? С loadWithNib:, затем нажать на стек навигации?

С уважением,

Питер

1 Ответ

3 голосов
/ 14 апреля 2011

Добро пожаловать в iOS программирование. Ваш сбой является проблемой управления памятью. Это может занять немного времени, чтобы освоить его, но управление памятью станет намного проще, если вы просто будете следовать одному правилу:

объект должен освободить все, что он сохраняет (alloc эквивалентен сохранению)

В этом случае ваш контроллер представления освобождает себя, и он определенно не сохраняет себя. Вот как работает последовательность с навигационным контроллером:

  1. Контроллер навигации инициализируется с помощью корневого контроллера представления (первого в его стеке). Позволяет назвать это firstViewController

  2. Действие пользователя говорит firstViewController инициализировать secondViewController и вставить его в контроллер навигации. В большинстве случаев firstViewController освобождает экземпляр secondViewController после его нажатия. На этом этапе firstVC делается с secondVC. Теперь навигационный контроллер сохраняет secondVC

  3. Пользователь касается кнопки возврата на навигационной панели secondVC. Контроллер навигации вытолкнет secondVC из стека и освободит его. Пока никакой другой объект не удерживает его, secondVC будет освобожден.

  4. Теперь пользователь вернулся в firstVC. Они могут выполнять те же действия пользователя, которые будут запускать и выдвигать новый экземпляр secondVC.

Надеюсь, это немного поможет.

Я бы также порекомендовал вам (пере) прочитать документы Apple и взглянуть на пример кода, на который есть ссылки в документе Framework.

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...