Como han mencionado otros, -retainCount
es prácticamente inútil. Cuando es nuevo en el recuento de administración/referencia de memoria en Objective-C, a veces puede ser tentador intentar usar - retainCount
para ayudar a entender cómo funciona el recuento de referencias, pero en realidad puede ser (al parecer) confuso en el mejor de los casos.
El código que ha publicado es potencialmente peligroso, en sí mismo, dependiendo del contexto que lo rodea de cómo se usa someObject
. También puede ser peligroso cuando se aplica a otras situaciones que no esperaba. Tómese el NSString
s constante creado con la directiva de compilación @"a string"
: estas cadenas se crean y están diseñadas para que nunca se publiquen. Por lo tanto la aplicación de su código como en el siguiente ejemplo se traduciría en un bucle infinito:
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *string = @"theString";
NSLog(@"retainCount == %lu", (unsigned long)[string retainCount]);
for (NSUInteger i = 0; i < [string retainCount]; i++) {
[string release];
}
[pool drain];
return 0;
}
Esta impresora:
2011-06-30 08:40:16.287 retainCount[35505:a0f] retainCount == 1152921504606846975
y luego entra en un bucle infinito.
No, no es una buena manera de liberar memoria. – Sneakyness
Lea la documentación de administración de memoria de Apple lo antes posible, que explica cómo administra la memoria. Nunca hagas esto –