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