UINavigationController - когда выпускать контроллеры с принудительным представлением и т. Д. - PullRequest
0 голосов
/ 24 ноября 2010

Извиняюсь за большой блок 'o' текста, но я несколько новичок, пытающийся использовать UINavigationController как часть приложения, которое я пишу, и мне просто интересно, как мне следует обрабатывать добавление просматривать контроллеры для UINavigationController и когда (если вообще) я должен освободить их.

На мой взгляд, существует два возможных подхода при добавлении контроллера представления:

  1. Иметь переменную экземпляра для каждого контроллера представления в управляющем классе. Инициализируйте его (если переменная экземпляра равна nil), прежде чем помещать его в контроллер nav. Затем освободите контроллер представления в методе dealloc управляющего класса, если он не равен nil.

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

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

Копая немного глубже, я подозреваю, что моя путаница связана с тем, что я не совсем понимаю, отвечаю ли я за избавление от контроллеров представления, которые помещаются в стек контроллера навигации, или же Я избавлюсь от них сам, когда они вытолкнут из его стека контроллера представления. (например, когда пользователь нажимает кнопку «назад».)

Если это первое, то я вижу, что мне нужно использовать подход с использованием переменных экземпляра и реализовать методы UINavigationControllerDelegate в управляющем объекте, чтобы определить, когда мне следует выпускать и обнулять каждый контроллер представления и т. Д.

Наконец (для бонусных баллов в загробной жизни), как вы можете легко определить, будет ли метод увеличивать счет сохранения одного из его параметров? (Похоже, в документации нет никаких подсказок, но, возможно, я упускаю что-то очевидное.) Например, когда я использую что-то вроде ...

[[self navigationController] pushViewController:exampleVC animated:YES];

... увеличит ли это количество отсчетов на контроллере вида? (Еще раз, я чувствую, что это должно , но это примерно столько же, сколько и шоколадного пожарного в эти опасные времена и т. Д.)

Заранее спасибо.

1 Ответ

1 голос
/ 24 ноября 2010

Это довольно просто.Если вы передаете объект другому объекту, который делает с ним что-то, что не находится под вашим непосредственным контролем, он сохраняет передаваемый вами объект (почти все работает так).

Например: все NSArray / Dictionary / SetКоллекции сохраняют ваши объекты, потому что, если бы вы освободили объект, содержащийся в такой записи, некоторые записи были бы недействительными, и коллекция не узнала бы.не знаю, когда и когда ваш viewcontroller показывается или сбрасывается.

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