Как использовать didReceiveMemoryWarning и viewDidUnload? - PullRequest
4 голосов
/ 22 сентября 2009

Как лучше всего использовать эти два метода для управления памятью? Мое текущее приложение может легко освободить свои представления после предупреждения памяти, потому что оно нуждается в большой памяти. Что мне нужно сделать в этих методах? Я использую различные перья в своих приложениях и соединяю объекты в них с моими контроллерами представления, не сохраняя их. Нужно ли сохранять объекты пера при загрузке представления из пера и почему? Я вижу в документации все изменилось с OS 3.0, и я говорю только о 3.0

Ответы [ 2 ]

4 голосов
/ 23 сентября 2009

Если вы говорите только об iOS 3.0, выпустите в viewDidUnload любые объекты, которые вы можете легко воссоздать. Затем вы можете восстановить или перезагрузить их из пера в viewDidLoad. Убедитесь, что когда вы отпускаете объекты, вы либо обнуляете их, либо ваш установщик делает это. Таким образом, вы можете использовать viewDidLoad для проверки на ноль или нет перед перезагрузкой или повторным созданием.

Что касается загрузки из объектов перьев, если вы загружаете в свои свойства и хотите, чтобы они были сохранены, вам не нужно снова их сохранять.

С Apple :

Класс UIViewController обеспечивает некоторую автоматическую обработку условий нехватки памяти с помощью метода didReceiveMemoryWarning (стр. 20), который освобождает ненужную память.

До iPhone OS 3.0 этот метод был единственным способом высвободить дополнительную память, связанную с вашим классом контроллера представления, но в iPhone OS 3.0 и более поздних версиях метод viewDidUnload (стр. 30) может быть более подходящим местом для большинства нужд. , Когда появляется предупреждение о нехватке памяти, класс UIViewController очищает свои представления, если он знает, что может перезагрузить или воссоздать их позже. Если это происходит, он также вызывает метод viewDidUnload, чтобы дать вашему коду возможность отказаться от владения любыми объектами, связанными с вашей иерархией представления, включая объекты, загруженные с помощью файла nib, объекты, созданные в вашем методе viewDidLoad (стр. 29), и объекты создаются лениво во время выполнения и добавляются в иерархию представлений. Как правило, если ваш контроллер представления содержит выходы (свойства или необработанные переменные, содержащие ключевое слово IBOutlet), вы должны использовать метод viewDidUnload, чтобы отказаться от владения этими выходами или любыми другими данными, относящимися к представлению, которые вам больше не нужны.

3 голосов
/ 02 января 2013

Начиная с iOS 6, viewDidUnload никогда не вызывается. От Apple :

До iOS 6, когда появлялось предупреждение о нехватке памяти, Класс UIViewController очищает свои представления, если он знает, что может перезагрузить или воссоздайте их снова позже. Если это произойдет, он также вызывает viewWillUnload и viewDidUnload методы, чтобы дать вашему коду шанс отказаться от права собственности на любые объекты, связанные с вашим видом иерархия, включая объекты, загруженные из файла пера, созданные объекты в вашем viewDidLoad методе, и объекты, созданные лениво во время выполнения и добавлено в иерархию представлений. На iOS 6 представления никогда не очищаются и эти методы никогда не вызываются. Если ваш контроллер представления должен выполнять определенные задачи, когда памяти мало, он должен переопределить Метод didReceiveMemoryWarning.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...