Ao usar o autorelease, quando ele é realmente lançado?
-
27-09-2019 - |
Pergunta
Às vezes me pergunto quando algo é lançado automaticamente.Adicionei um NSLog na desalocação de vários objetos, mas não consegui encontrar nada de útil.
Quando algo é liberado quando o autorelease é usado?É imprevisível ou há algum thread extra em execução?Obrigado.
Solução
Quando o "pool de liberação automática expirar".
O que isso normalmente significa é quando a pilha é desenrolada.
Então pense desta forma: seu aplicativo é orientado a eventos.Você recebe eventos enviados para ele - e eles são processados por meio de uma série de funções.Quando cada uma das funções retornar e o evento terminar de ser processado, o autorelease será chamado.
Isso significa que você pode contar com que um objeto ainda esteja ativo quando você o libera automaticamente e o retorna de uma função para seu chamador.Nunca espere que ele esteja presente ao processar qualquer tipo de evento subsequente ou quando for chamado fora do stack frame existente.
Outras dicas
Cada encadeamento em um aplicativo de cacau mantém sua própria pilha de objetos NSAUTORELEASEPOOL. Quando um encadeamento termina, ele libera automaticamente todos os pools de autorlease associados a si mesmos.