2010-06-07 14 views
8

Uso de la acumulación y analizar de XCode vi tengo una pérdida de memoria en mi código:potenciales de fuga de un objeto asignado

- (NSString *) doIt 
{ 
    NSString *var = [[NSString alloc] init]; 

    return var; 
} 

Esto es por supuesto un fragmento simplificada de mi problema

donde hacer Libero el objeto?

Respuesta

18

Esta es una situación perfecta para autorelease.

return [var autorelease]; devolverá el objeto con su conteo de retención presente de 1 y disminuirá el conteo de retención del objeto en algún momento en el futuro, después de lo cual el código de llamada debería haber retenido el objeto si fuera necesario.

+1

Es determinista: el objeto se liberará cuando se vacíe el grupo de autorrelease actual. Por lo general, no es importante ya que el objeto ya no es su responsabilidad y está garantizado que no lo será mientras dure su método, siempre y cuando no esté creando un grupo. – Chuck

+0

Esa fue una mala elección de palabra. Supuse que el objeto del OP iría al grupo de autorrelease predeterminado y, como tal, no tendría control sobre cuándo se lanzó. Corregido arriba. – warrenm

+0

¿Es correcto con ARC? – UserDev

Cuestiones relacionadas