¿Puedes enviar cuentas retenidas a NSLog para ayudar al aprendizaje?
Pregunta
Solo es curioso si hay alguna forma de mostrar una cuenta de retención de objetos utilizando NSLog. Solo quiero imprimirlos en la consola para aprender cómo funciona retener / liberar en un código simple.
saludos -gary-
Solución
No solo es posible, también es muy fácil:
NSLog(@"retain count=%d",[obj retainCount]);
Otros consejos
Creo que podría estar teniendo un problema con NSString donde los mensajes de retención y liberación pueden enviarse a una constante de cadena, pero en realidad no tienen ningún efecto ni alteran los objetos de cuenta de retención. El siguiente código funciona, cámbielo para usar NSString y retener / liberar no tiene efecto.
Código:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSMutableString *myString = [[NSMutableString alloc] initWithString:@"AB"];
NSLog(@"RC: %d", [myString retainCount]);
[myString retain];
NSLog(@"RC: %d", [myString retainCount]);
[myString release];
NSLog(@"RC: %d", [myString retainCount]);
[myString release];
[pool drain];
return 0;
}
Salida:
Running…
TESTBED[12306:a0f] RC: 1
TESTBED[12306:a0f] RC: 2
TESTBED[12306:a0f] RC: 1
gary
En la consola del depurador, puede escribir: print (unsigned int) [thing retainCount]