Подтвердить что ты не робот

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?

4b9b3361

Ответ 1

ARC обрабатывает код сохранения и выпуска, поэтому установка _foo для nil является достаточной, чтобы позволить исполняемому коду ARC выполнить выпуск. Вы явно не освобождаете, вы просто управляете своим графиком объектов, а сгенерированный код ARC будет выполнять выпуск, когда это необходимо.

Подробнее читайте в документе Apple Переход к примечаниям о выпуске ARC".

Ответ 2

Вы можете сделать несколько вещей, но все они зависят от приложения. Такие вещи, как очистка массивов и словарей и установка ссылок на объекты на nil (ARC способ удаления объектов).