Dada la siguiente definición de la propiedad:Objective-C Propiedades y Gestión de memoria
@property (nonatomic,retain) MyObject* foo;
tiene el siguiente código causar una pérdida de memoria:
self.foo = [[MyObject alloc] init];
?
Parece que la llamada alloc incrementa el conteo de retención en el objeto a 1, luego el retener dentro del setter de propiedad lo aumenta a 1. Pero dado que el recuento inicial nunca se reduce a 0, el objeto se mantendrá incluso cuando el yo es liberado ¿Es ese análisis correcto?
Si es así, parece que tengo dos alternativas:
self.foo = [[[MyObject alloc] init] autorelease];
que no se recomienda en el iPhone por razones de rendimiento, o:
MyObject* x = [[MyObject alloc] init];
self.foo = x
[x release];
que es un poco engorroso. ¿Hay otras alternativas?
Esta es una gran alternativa que ahorra tiempo al crear instancias. –