Почему @autoreleasepool все еще нужен для ARC?
По большей части с ARC (Автоматический подсчет ссылок) нам вообще не нужно думать об управлении памятью с объектами Objective-C. Не разрешено создаватьNSAutoreleasePool
s больше, однако есть новый синтаксис:
@autoreleasepool {
…
}
Мой вопрос: зачем мне это нужно, когда я не должен вручную выпускать / автоматически выпускать?
РЕДАКТИРОВАТЬ: Подводя итог, я получил кратко все ответы и комментарии:
Новый синтаксис:
@autoreleasepool { … }
это новый синтаксис для
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
…
[pool drain];
Важнее:
ARC используетautorelease
также как иrelease
.Для этого нужен пул автоматических выпусков.ARC не создает пул автоматических релизов для вас.Тем не мение:В основном потоке каждого приложения Cocoa уже есть пул авто-релизов.Есть два случая, когда вы можете использовать@autoreleasepool
:Когда вы находитесь во вторичном потоке и нет пула автоматического выпуска, вы должны создать свой собственный для предотвращения утечек, таких какmyRunLoop(…) { @autoreleasepool { … } return success; }
.Когда вы хотите создать более локальный пул, как показал @mattjgalloway в своем ответе.