Почему @autoreleasepool все еще нужен с ARC?

По большей части с ARC (автоматический подсчет ссылок) нам вообще не нужно думать об управлении памятью с помощью объектов Objective-C.Больше не разрешено создавать NSAutoreleasePool , однако есть новый синтаксис:

@autoreleasepool {
    …
}

Мой вопрос: зачем мне это вообще, если я не должен вручную выпускать / автоматически выпускать?


РЕДАКТИРОВАТЬ: Кратко резюмируя то, что я получил из всех ответов и комментариев:

Новый синтаксис:

@autoreleasepool {…} - это новый синтаксис для

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
…
[pool drain];

Что еще более важно:

  • ARC использует автозапуск , а также выпуск .
  • Для этого необходим пул автоматического выпуска.
  • ARC не создает за вас пул автоматического выпуска. Однако:
    • В основном потоке каждого приложения Какао уже есть пул автозапуска.
  • Есть два случая, когда вы можете захотеть использовать @autoreleasepool :
    1. Когда вы находитесь во вторичном потоке и нет пула автоматического освобождения, вы должны создать свой собственный для предотвращения утечек, например myRunLoop (…) {@autoreleasepool {…} return success; } .
    2. Если вы хотите создать более локальный пул, как @mattjgalloway показал в своем ответе.
191
задан Alexander Abakumov 22 June 2017 в 18:50
поделиться