Gestión de memoria de liberación automática de Objective-C

Estoy tratando de entender cuándo llamar a autorelease y qué hará esto realmente a mi objeto.

Despues de leer Acerca de la gestión de memoria en la Biblioteca para desarrolladores de Mac. Entendí que cuando tienes un método que actúa como un método de fábrica, al crear un nuevo objeto y devolverlo, el método no tiene forma de liberar el objeto antes de devolverlo, ya que esto daría como resultado una desasignación objeto devuelto.

Ejempl

- (Test *) createNewTest 
{
    Test *newInstance = [[Test alloc] init];
    [newInstance release];
    return newInstance; // deallocted object returned.
}

En cambio, debería usarautorelease:

El método de liberación automática, definido por NSObject, marca el receptor para su posterior lanzamiento

Mi pregunta es: si el objeto se lanzará más tarde, ¿cómo sé cuándo se lanzará?

- (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?
}

¿Cómo puedo usar con seguridad el objeto devuelto automáticamente dentro de mirunIt método si no sé cuándo ocurre la liberación automática? ¿Debo retener el objeto devuelto porcreateNewTest? ¿O puedo usarlo con seguridad dentro derunIt alcance?

Respuestas a la pregunta(4)

Su respuesta a la pregunta