0

Согласно документам Apple, если приложение игнорирует предупреждение о памяти, система может принудительно освободить грязную память, если она понадобится. В то же время в некоторых случаях ручное освобождение данных в ответ на предупреждение о памяти и последующее восстановление не приемлемо по причине производительности. Так можно ли узнать, действительно ли некоторые члены экземпляра класса были принудительно очищены? Назначены ли они nil? А как насчет указателей на объекты C++, являющихся членами объектов Obj-C?Игнорирование didReceiveMemoryWarning в IOS

+0

Где вы узнали, что ОС освобождает грязную память? – uliwitness

+0

На самом деле я слышал об этом в WWDC 2012 Сессия 242 Производительность приложения IOS - видео с памятью – tonso

ответ

3

Это не так, как это работает. ОС освободит память, оставив приложение. ОС не может входить и случайно удалять объекты, потому что у нее нет способа понять, какие объекты будут безопасными для очистки, а какие - нет.

IIRC Единственное, что он иногда делает, это выгрузить несколько представлений диспетчера представлений (но не фактический объект контроллера), которые сложены, например. в навигационном контроллере и в настоящее время не отображается. Он может это сделать, потому что он знает, как загрузить эти представления и какие ивары на них ссылаются (потому что вы сказали это через IBOutlet и т. Д.), Поэтому он может и будет на самом деле NIL.

Обновление: В наши дни также есть классы кеша, которые будут вытеснять их объекты при получении предупреждения о памяти, но вам нужно будет явно использовать эти классы для ваших объектов, которые будут выпущены.

Смежные вопросы