UIViewController didReceiveMemoryWarning в среде ARC
Я оцениваю переход на ARC (автоматический подсчет ссылок) и рефакторинг для применения к моему коду.
Среди вещей, которые я должен выяснить, есть следующее:
что мне делать в didReceiveMemoryWarning, если явная релиз объектов не разрешен ARC?
В настоящее время я использую этот метод для выпуска объектов, принадлежащих моему контроллеру, и которые легко извлекаются с помощью ленивых геттеров:
- (void)didReceiveMemoryWarning {
[_foo release]; _foo = nil;
[super didReceiveMemoryWarning];
}
и относительный ленивый геттер:
- (Foo *)foo {
if (_foo) {
return _foo;
}
return (_foo = [[Foo alloc] init]);
}
Кажется невозможным реализовать такой "шаблон" в ARC... так, что мне делать? Должно ли didReceiveMemoryWarning считаться "устаревшим" /бесполезным в ARC?
Ответы
Ответ 1
ARC обрабатывает код сохранения и выпуска, поэтому установка _foo для nil является достаточной, чтобы позволить исполняемому коду ARC выполнить выпуск. Вы явно не освобождаете, вы просто управляете своим графиком объектов, а сгенерированный код ARC будет выполнять выпуск, когда это необходимо.
Подробнее читайте в документе Apple Переход к примечаниям о выпуске ARC".
Ответ 2
Вы можете сделать несколько вещей, но все они зависят от приложения. Такие вещи, как очистка массивов и словарей и установка ссылок на объекты на nil (ARC способ удаления объектов).