Objetivo C: bucle de método getter infinito después de convertir a ARC

Tengo el siguiente método:

-(NSMutableArray *)someArray{ // line 1 if(self.someArray == nil){ // line 2 self.someArray = [[NSMutableArray alloc]init]; } return self.someArray; } 

Tenía esto en non-ARC, y funciona bien: Si self.someArray en la línea 2 es nil , entonces avanza e instálalo.

Sin embargo, después de cambiar a ARC, cuando llega a la línea 2, vuelve a la línea 1 y continúa el ciclo.

Cualquier ayuda será apreciada. Gracias.

La forma adecuada es

 @synthesize someArray = _someArray; - (NSMutableArray *)someArray { if (!_someArray) { _someArray = [NSMutableArray array]; } return _someArray; } 

self.someArray llama al getter, de ahí el bucle infinito. use _someArray dentro de ese método en su lugar (suponiendo que esté usando la ivar automática proporcionada por la propiedad. De lo contrario, use cualquiera que sea su variable de respaldo).

Lo que está sucediendo es que está llamando al método de acceso dentro del acceso. Pero si cada uno se llama a sí mismo, nunca romperá este ciclo.

Use la propiedad auto sintetizada para evitar esto:

 -(NSMutableArray *)someArray{ // line 1 if(_someArray == nil){ // line 2 _someArray = [[NSMutableArray alloc]init]; } return _someArray; }