8

Suponiendo que escribí el código de abajo en una clase A:que vuelven objetos autoreleased utilizando ARC

-(NSArray *) returnListNames { 

    NSArray *returnList = [NSArray arrayWithArray:myListNames]; 

    return (returnList); 
} 

Y en una clase de BI conseguir esa lista en un cierto margen de esta manera:

{ 
    /* Without ARC I would retain the array returned from ClassA 
     to guarantee its reference like this: 
     [[myClassA returnListNames] retain]; */ 

    NSArray *myNames = [myClassA returnListNames]; 

} 

Teniendo en cuenta que el returnList se asignó usando un método de liberación automática, ¿cómo puedo garantizar que no perderé la referencia al mismo usando ARC (bajo el cual no puedo usar retain)? ¿Tendré que usar [[NSArray alloc] init] en la matriz myNames? ¿O debo usar alloc en returnList en lugar de un método de liberación automática? ¿O puedo simplemente confiar en ARC? ¿O hay otra solución?

Respuesta

12

ARC se encargará de esto, por lo que puede confiar en él y dedicarse a su negocio con esa matriz. Si ve que necesita retener myNames, agregará una llamada de retención para usted, por ejemplo, o hará lo que haga en realidad cuando compile el código que lo usa.

+0

Así que puedo seguir utilizando un método de liberación automática al asignar * returnList que ARC garantizará su existencia. ¿Derecha? –

+2

Eso es correcto. Ni siquiera importa si usa un método de liberación automática o un alloc-init. – BoltClock

+0

@BoltClock cuando se lanza el objeto en este caso? – Yadnesh

Cuestiones relacionadas