Por que @autoreleasepool ainda é necessário com o ARC?
Na maior parte do tempo com o ARC (contagem automática de referência), não precisamos pensar em gerenciamento de memória com objetos Objective-C. Não é permitido criarNSAutoreleasePool
s, no entanto, há uma nova sintaxe:
@autoreleasepool {
…
}
Minha pergunta é: por que eu precisaria disso quando não deveria liberar / liberar manualmente manualment
EDITAR Para resumir o que recebi de todas as respostas e comentários de forma sucinta:
New Syntax:
@autoreleasepool { … }
é uma nova sintaxe para
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
…
[pool drain];
Mais importante
ARC usaautorelease
assim comorelease
. Precisa de um pool de liberação automática para fazer iss @ARC não cria o pool de liberação automática para você.Contudo O segmento principal de todo aplicativo Cocoa já possui um pool de liberação automátic Há duas ocasiões em que você pode querer usar@autoreleasepool
: Quando você estiver em um encadeamento secundário e não houver um pool de liberação automática, deverá criar seu próprio para evitar vazamentos, comomyRunLoop(…) { @autoreleasepool { … } return success; }
.Quando você deseja criar um pool mais local, como @mattjgalloway mostrou em sua resposta.