ios inicializa una instancia dentro de una función para usar fuera
-
29-10-2019 - |
Pregunta
el analizador de xcode me dice que un método devuelve un objeto Objective-C con un conteo de retención de +1:
pero el self.athletes es un objeto que necesito también fuera de mi función ... ¿cómo puedo solucionar esta 'advertencia? gracias de nuevo
los atletas se declaran así:
NSMutableArray *athletes;
@property (nonatomic, retain) IBOutlet NSMutableArray *athletes;
Solución
Reemplace esa línea con esta:
self.athletes = [NSMutableArray array];
Escribí una explicación completa aquí: Gestión de memoria para propiedades con atributo de retención
Otros consejos
Dado que su propiedad se define con "retener", el uso de la notación de puntos dará como resultado una retención adicional.El retorno de [[NSMutableArray alloc] init] tiene un recuento de retención de 1, y luego, cuando establezca la propiedad utilizando la función de establecimiento generada por la declaración de propiedad, tendrá un recuento de retención de 2.
Para solucionarlo:
self.athletes = [NSMutableArray array]; // Returns an autoreleased object
O también puede hacer esto:
athletes = [[NSMutableArray alloc] init]; // Doesn't use the setter generated by the property declaration, so doesn't retain again.
Hay una buena manera de manejar esto (y ya usó este patrón al crear la interfaz de usuario).
NSMutableArray * atletasTemp= [[NSMutableArray alloc] init];
self.athletes= atletasTemp;
[lanzamiento de la temperatura de los atletas];
Aquí no necesita llevar la carga de un objeto de liberación automática.