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?

questionAnswers(3)

yourAnswerToTheQuestion