Gerenciamento de memória de liberação automática Objective-C
Estou tentando entender quando chamar o autorelease e o que isso realmente fará com o meu objeto.
Depois de lerSobre o gerenciamento de memória na Mac Developer Library, entendi que quando você tem um método que age como um método de fábrica - criando um novo objeto e retornando-o - o método não tem como liberar o objeto antes de devolvê-lo, porque isso resultaria em um objeto desalocado. sendo devolvido.
Exemplo
- (Test *) createNewTest
{
Test *newInstance = [[Test alloc] init];
[newInstance release];
return newInstance; // deallocted object returned.
}
Em vez disso, eu deveria usarautorelease
:
O método de liberação automática, definido pelo NSObject, marca o receptor para liberação posterior
Minha pergunta é: se o objeto deve ser lançado mais tarde, como eu sei quando ele está sendo lançado?
- (Test *) createNewTest
{
Test *newInstance = [[test alloc] init];
[newInstance autorelease];
return newInstance;
}
- (void) runIt
{
Test *myInstance = [self createNewTest];
// when is myInstance released?? and thereby not valid to my function anymore?
}
Como posso usar com segurança o objeto autoreleased retornado dentro do meurunIt
método se eu não souber quando o autorelease acontece? Devo manter o objeto retornado pelocreateNewTest
? Ou posso usá-lo com segurança dentro dorunIt
escopo?