Должен ли я хранить копию всех значений, помещенных в представления в моем приложении UIKit?

#ios #ipad #uikit #uiviewcontroller #ipod

#iOS #iPad #uikit #uiviewcontroller #ipod

Вопрос:

У меня есть контроллер представления с представлением, загруженным из кончика. Насколько я понимаю, представление может быть выгружено из памяти в любое время контроллером by. Допустим, мое приложение переходит в фоновый режим, например.

Если у меня есть значения, такие как текст в текстовом поле, эти значения будут потеряны при выгрузке представления. Или я мог бы захотеть установить эти значения до загрузки представления, и в этом случае мои выходы не установлены, и я пока не могу этого сделать.

Следовательно, нужно ли мне сохранять теневую копию всех значений в моем пользовательском интерфейсе, чтобы я мог повторно установить их в viewDidLoad: если представление выгружается, а затем загружается снова?

Или я что-то делаю неправильно?

Ответ №1:

В случае перехода приложения в фоновый режим реализуйте методы для сохранения и восстановления приложения. UIApplication сообщит вам, когда фокус переключается и изменился в следующих методах UIApplicationDelegate:

  applicationDidBecomeActive:
 applicationWillResignActive:
 applicationDidEnterBackground:
 applicationWillEnterForeground:
  

Более подробную информацию смотрите в справке.

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

Комментарии:

1. Хорошо, но это работает только по одной конкретной причине выгрузки представления. Как насчет любой другой причины выгрузки представления? Включая те, которые, возможно, не задокументированы. Я не думаю, что UIViewController дает какие-либо гарантии относительно того, когда представление выгружается.

2. Ну, представления UIViewController полностью управляются UIViewController. Посмотрите руководство по программированию View Controller для iOS, чтобы получить четкое представление. Мое предложение таково: не волнуйтесь. Даже если вы попадете в такие ситуации, вы будете склонны оптимизировать использование памяти, а не беспокоиться о восстановлении. UIViewController выполняет за вас массу действительно сложной работы, поэтому убедитесь, что вы выполняете другую часть должным образом. Единственная другая причина, по которой view может быть выгружен, заключается в том, что вы уничтожили его, например, вытащив view controller из nav controller, и вам нужен новый экземпляр VC при следующем нажатии на него. Не сохраняйте ссылки.

3. Общее правило таково: если вы позволяете UIViewController управлять вашим представлением, что ж, позвольте ему управлять этим. Когда вы закончите с view, уничтожьте UIViewController или удалите view из superview. Если вам нужен пользовательский контроллер представления, ознакомьтесь с этим документом: developer.apple.com/library/ios/#featuredarticles / …