Это, безусловно, правильный дизайн, в зависимости от семантики ваших контроллеров.Я использовал это, когда «ведущий» контроллер представления управлял (и принимал вызовы делегатов) от «ведомых» контроллеров представления.
Что касается вашего анализа того, что происходит в случае отправки предупреждения памяти, возможно, существуетнебольшое недоразумение в том, что контроллер представления фактически получает viewDidUnload
, но это означает, что управляемый им view
был выгружен для возврата некоторой памяти, поэтому контроллер может выполнять свою часть очистки (как обычно),Контроллер представления сам по себе не «выгружен» или освобожден, или что-то еще.Таким образом, обратный вызов всегда будет отправлен.Единственное, что, если представление ранее было выгружено, вам необходимо восстановить его.
Помните также, что, если для вас совершенно невозможно воссоздать ваши незагруженные представления, вы можете запретить конкретное представление.из-за освобождения без вызова super
в вашем didReceiveMemoryWarning
переопределении.Примите это предложение "cum granum salis", однако!
В конце концов, нет необходимости использовать модальное представление.
Действительно, это то, что Apple Docs говорит:
(void) didReceiveMemoryWarning: реализация по умолчанию этого метода проверяет, может ли контроллер представления безопасно освободить свое представление.Это возможно, если само представление не имеет суперпредставления и может быть перезагружено либо из файла пера, либо с помощью пользовательского метода loadView.Если представление может быть освобождено, этот метод освобождает его и вызывает метод viewDidUnload.
(void) viewDidUnload: этот метод вызывается как аналог метода viewDidLoad.Он вызывается в условиях нехватки памяти, когда контроллеру представления необходимо освободить свое представление и любые объекты, связанные с этим представлением, чтобы освободить память.Поскольку контроллеры представлений часто хранят ссылки на представления и другие связанные с представлением объекты, вы должны использовать этот метод, чтобы отказаться от владения этими объектами, чтобы можно было восстановить память для них.Вы должны делать это только для объектов, которые вы можете легко восстановить позже, либо в вашем методе viewDidLoad, либо из других частей вашего приложения.Вы не должны использовать этот метод для публикации пользовательских данных или любой другой информации, которая не может быть легко воссоздана.