Прежде всего, это всего лишь рекомендации, поэтому, если вы не думаете, что имеет смысл выпускать что-то в didReceiveMemoryWarning
, не делайте этого.Но имейте в виду, что если ваше приложение в первую очередь вызывает предупреждение о памяти, то оно в конечном итоге просто будет остановлено ОС.
Re (1): Критическое против некритического - этополностью ваш звонок.Только вы действительно можете определить, какие данные у вас есть, которые вы считаете критическими.Хотя это, вероятно, будет тесно связано с вашим (3), то есть что-то, что легко воссоздается, вероятно, не слишком критично.
Re (2): Я не думаю, что утверждение относится кпорядок звонков.Как вы уже поняли, в общем случае viewDidUnload
будет вызываться после didReceiveMemoryWarning
(поскольку didReceiveMemoryWarning
может вызвать viewDidUnload
для вызова).Например, в viewDidUnload
можно освободить ссылки, хранящиеся в элементах пользовательского интерфейса, из кончика.Так что не выпускайте их также в didReceiveMemoryWarning
.
Re (3): Если представление используется и, следовательно, не может быть выгружено, тогда да, очевидно, это не обязательно имеет большой смыслотпустите его в didReceiveMemoryWarning
.Однако у вас могут быть случаи, когда представление не может быть выгружено, но известно, что оно невидимо (не очень нормально), и в этом случае может иметь смысл выгрузить его данные и воссоздать его, когда представление снова станет видимым..
Кроме того, я согласен с тем, что замечания "Вместо этого вы должны учитывать ..." немного странные, но опять же я думаю, что смысл рекомендовать выпуск данных в didReceiveMemoryWarning
проистекает из того факта, что есливы получаете эти предупреждения, тогда ваше собственное приложение может оказаться под угрозой закрытия.Таким образом, хотя в настоящее время viewDidUnload
, вероятно, всегда вызывается как результат предупреждения о памяти, это не всегда может иметь место в будущем, и поэтому концептуально имеет смысл выпускать данные в самом didReceiveMemoryWarning
.В didReceiveMemoryWarning
вы ЗНАЕТЕ, что есть давление памяти, в viewDidUnload
вы не можете.Так что, хотя правда, что данные потом будут воссозданы, это может быть лучше, чем прекращение работы вашего приложения.Для пользователя это будет выглядеть так, как будто приложение зависло.
Мой личный подход к этим методам обычно таков:
- viewDidUnload - освобождает любые ссылки на элементы пользовательского интерфейса, загруженные из пера.,Освободить все элементы пользовательского интерфейса, которые я сам создал в
viewDidLoad
. - didReceiveMemoryWarning - освободить любые данные, которые используются в представлении пользовательского интерфейса, которые я могу воссоздать, если / когда
viewDidLoad
вызывается снова (или в каком-либо другом приложении)конкретное событие).НЕ выпускайте ничего, что я не могу воссоздать.