Как использовать didReceiveMemoryWarning в стеке UINavigationController - PullRequest
3 голосов
/ 16 июля 2011

Мое приложение имеет несколько UIViewController в стеке (под UINavigationController).В некоторых случаях я получаю предупреждения памяти, когда я нахожусь во внутренних UIViewControllers (в основном это происходит, если устройство перегружено другими приложениями, работающими в фоновом режиме).Когда появляются эти предупреждения памяти, приложение продолжает работать (большую часть времени), а затем, когда оно возвращается к rootViewController, оно перезагружает его, но не заполняет объекты представления (главным образом изображения UIButton).

Я хочу реализовать didReceiveMemoryWarning и applicationDidReceiveMemoryWarning, но я не совсем понимаю, как это сделать.

Конечный результат, который я ищу, заключается в том, что, когда приложение выполняет эту "перезагрузку"после предупреждения о памяти он «перезагрузится» rootViewController в том же состоянии, в котором он находился до того, как пользователь начал «погружаться» во внутренние UIViewControllers.

  • Как мне выполнить реализацию?
  • Должен ли я реализовывать didReceiveMemoryWarning по умолчанию в каждом UIViewController?
  • Поскольку предупреждение о памяти всегда возникает во внутренних UIViewController, как я должен сообщить rootViewController, что он должен работать didReceiveMemoryWarning?
  • Как мне сообщить rootViewController, какие настройки он должен делать?Другими словами - могу ли я сохранить настройки где-нибудь, где didReceiveMemoryWarning не удаляет их и после активации didReceiveMemoryWarning «вызывает» их, чтобы пользователь мог видеть тот же экран, с которого они начали «навигацию по уровням»?

1 Ответ

3 голосов
/ 16 июля 2011

Любой невидимый контроллер представления в стеке UINavigationController сбросит свое представление. Он также отправит вам предупреждение. Если у вас есть большие структуры данных, удерживаемые контроллерами представления, вы должны сбросить их, если это возможно.

Корневой (другой) контроллер должен надлежащим образом обрабатывать viewDidUnload и иметь возможность циклически проходить через другую loadView / viewDidLoad фазу.

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

...