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.

Foi útil?

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

Da documentação do iOS

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top