UIViewController's didReceiveMemoryWarning в среде ARC - PullRequest
12 голосов
/ 14 октября 2011

Я оцениваю переход на ARC (автоматический подсчет ссылок) и рефакторинг для применения к моему коду.Среди вещей, которые я должен выяснить, есть следующее:

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

- (void)didReceiveMemoryWarning {
    [_foo release]; _foo = nil;
    [super didReceiveMemoryWarning];
}

и относительных ленивых геттеров:

- (Foo *)foo {
    if (_foo) {
        return _foo;
    }
    return (_foo = [[Foo alloc] init]);
}

Кажется невозможнымреализовать такой «шаблон» в ARC… так что мне делать?Должно ли ReReceptionMemoryWarning считаться «устаревшим» / бесполезным в ARC?

Ответы [ 2 ]

20 голосов
/ 14 октября 2011

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

Прочтите документ Apple Переход к примечаниям к выпуску ARC для получения дополнительной информации.

0 голосов
/ 14 октября 2011

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

...