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-

¿Fue útil?

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]

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top