Контроллер списка и деталей - PullRequest
0 голосов
/ 02 февраля 2011

Если у меня 2 контроллера;Список и подробности контроллера, как правильно управлять памятью для этих двух контроллеров?

Я имею в виду, в какой момент на них должен быть вызван релиз?

Также в случае, если мой контроллер списков является динамическим (т.е. данные вызываются из внешнего веб-сервиса), и некоторые данные передаются в детальный контроллергде именно я должен написать код для извлечения / отображения данных в подробном контроллере.Я имею в виду, должно ли это быть viewDidLoad или viewWillAppear?

Любые примеры будут великолепны.

Ответы [ 2 ]

0 голосов
/ 02 февраля 2011

По моему опыту, лучший способ определить контроллер подробного вида:

MyDetailController * dc = [[MyDetailController alloc] initWithMyObject: anObject];
[self.navigationController pushViewController: dc animated: YES];
[dc release];

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

Полагаю, ваш контроллер списков является основным в вашем приложении, для которого нужно создать следующие экземпляры:

- (BOOL) application: (UIApplication *) application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions {
_baseWindow = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];
_listVC = [MyListController new];
[_baseWindow addSubview: _listVC.view];
[_baseWindow makeKeyAndVisible];
return YES;
}

И выпустить:

- (void) dealloc {
[_listVC release]; _listVC = nil;
[_baseWindow release]; _baseWindow = nil;
[super dealloc];
}

Помните, что -viewDidLoad вызывается после-loadView, который, в свою очередь, вызывается, когда кто-то пытается получить доступ к свойству -view контроллера представления.

Таким образом, вы можете подготовить представление в -viewDidLoad и выполнить некоторые дополнительные задачи в -viewWillAppear или -viewDidAppear.,Обратите внимание, что -viewWillAppear (и подобные методы) называется КАЖДЫЙ РАЗ, чтобы представление контроллера представления отображалось на экране.То есть, например, если вы нажмете другой виртуальный канал из подробного vc, а затем выберете, снова будет вызван -viewDidAppear.

0 голосов
/ 02 февраля 2011

Нет однозначного ответа. Но мой ответ ... viewWillAppear

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

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

Использование viewWillAppear делает мой код более согласованным и облегчает внесение изменений, когда я понимаю, что подробный вид вызывается намного чаще, чем я ожидаю. Я должен повторно использовать его вместо того, чтобы создавать его каждый раз.

Что касается того, когда вы должны их выпустить ... это действительно зависит от того, с какой точки зрения. Как часто это используется? Сколько памяти нужно, чтобы просто существовать? Сколько работы нужно, чтобы воссоздать?

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