Использование viewDidLoad после didReceiveMemoryWarning и viewDidUnload - PullRequest
2 голосов
/ 01 февраля 2012

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

Предположим, у меня есть контроллер представления VC1, который содержит подпредставление, которое управляется контроллером представления VC2 (который имеет это подпредставление, это свойство view).Первоначально, если я хочу поместить представление VC2 в другое представление VC1, я мог бы сделать это:

UIView *VC2 = [UIView alloc] initWithFram...];
VC2.delegate = self;
... // other references to VC2, but not to it's view, yet.
[VC1.view addSubview VC2.view];  // At this point VC2 loadView is called automatically,
                                 // followed by VC2 viewDidLoad.

Через некоторое время в VC2 будет получено предупреждение о памяти.Таким образом, вызывается didReceiveMemoryWarning в VC2, за которым следует viewDidUnload VC2.

На этом мое понимание заканчивается (если то, что я уже сказал, верно!)

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

Как именно оно выпускается?DidReceiveMemoryWarning выполняется в VC2.VC2 выпускает свой собственный вид?Если нет, то что должно произойти.

Второй вопрос, если представление VC2 было освобождено, предположим, что представление необходимо снова (как кто-то выбирает соответствующую вкладку на панели вкладок).Насколько я понимаю, VC2 loadView вызывается, если ссылка view свойство VC2.Первоначально на него ссылались, когда VC1 добавил его как подпредставление, используя ссылку на свойство.Контроллер панели вкладок может вызывать его по ссылке через контроллер представления VC2, который находится в массиве viewControllers контроллера панели вкладок.Поэтому я думаю, что контроллер панели вкладок будет ссылаться на свойство view, и это приводит к вызову loadView VC2.

Ну, я прошел свой второй вопрос и, возможно, ответил на него одновременно.Может кто-нибудь подтвердить, правильно ли я это понимаю?

Кроме того, мне все еще не ясно (как в моем первом вопросе), как и где должно быть выпущено представление VC2.

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

...