Какие данные лучше инициализировать в loadView по сравнению с init - PullRequest
2 голосов
/ 08 января 2012

Когда памяти мало и представления очищаются ОС, я понимаю, что viewDidUnload - подходящее место для очистки объектов и памяти, используемых вашим UIViewController (которые иначе не были бы очищены как функция иерархия представления). Эти данные затем повторно инициализируются при повторном вызове loadView для создания представления. Может ли кто-нибудь привести примеры того, какие вещи можно очистить (и аналогично инициализировать в loadView)?

У меня есть некоторые данные, которые я инициализирую в loadView в настоящее время, что задает основу для моего контроллера представления для запуска сложного сценария анимации, включающего подписи, изображения и т. Д. Я подумал, что было бы целесообразно выпустить и очистить эти данные, если бы мое представление быть удаленным ОС (и были вызваны viewDidUnload), но потом я подумал: почему бы мне просто не инициализировать эти данные в init и очистить их в dealloc вместо многократной инициализации и очистки одних и тех же данных (это не t изменяется в зависимости от того, когда представление загружено или показано). Будет ли это лучшее место для этого?

В основном, я думаю:

  1. да, я должен просто инициализировать его в init и выпустить в dealloc, потому что он никогда не изменится
  2. Инициализация объектов в loadView (и последующая очистка в viewDidUnload) является подходящей практикой, когда эти данные будут инициализироваться по-разному в зависимости от того, когда загружается представление (или даже более целесообразно, когда представление появляется в viewWillAppear / viewWillDisappear) или это хороший кандидат для освобождения памяти, потому что он занимает много памяти, которую вы хотели бы видеть свободной, если представление не активно.

Может ли кто-нибудь дать мне некоторые разъяснения по моим вопросам и / или моему мышлению?

1 Ответ

0 голосов
/ 08 января 2012

Если вы собираетесь перемещаться между этим видом и другим, и контроллер представления будет сохраняться, вы действительно можете переместить инициализацию на init и очистить ее в dealloc. но то, что вы хотели бы сделать, это также очистить его в - (void)didReceiveMemoryWarning (будьте осторожны, не используйте self.view в didReceiveMemoryWarning, иначе это перезагрузит представление :)). тогда вы можете использовать отложенную загрузку, чтобы перезагрузить его в viewDidLoad (то есть, если он еще не существует, инициализировать данные, в противном случае - нет).

конечно, вы не можете выполнить какую-либо инициализацию в init, которая зависит от присутствия представления. viewDidLoad место для этого.

...