views:

665

answers:

2

In the dealloc method for a class how would I print out the ID (or some other unique identifier) for the instance being deallocated?

- (void)dealloc {
    NSLog(@"_deallocing: ??");
    [super dealloc];
}

Is this possible? I am just trying to get a little more feedback in the console as an aid to learning.

many thanks -gary-

+2  A: 

Try this:

- (void)dealloc {
    NSLog(@"_deallocing: %@", self);
    [super dealloc];
}

This will output a bit more info about the object to the console. Depending on the class, you'll either get a memory address and the class name or something more detailed. If you want to give something more detailed in your own classes, override this method and return whatever you'd like:

-(NSString *)description {
    return @"Something useful about this object";
}
iKenndac
Excellent, so can I assume that "self" is simply accessing the default description of the class?
fuzzygoat
That's right - the NSLog() function replaces %@ with the given object's description. NSObject's -description method provides the default <classname : address> value. See here for more info on useful stuff to do with NSLog: http://www.cocoadev.com/index.pl?NSLog
iKenndac
What if you want the ID for a different class? E.g. I have a member variable `NSMutableArray` and I'd like to print its instance ID.
Rob S.
+2  A: 

If you specifically want the memory address of the object (which I suppose could be considered an "identifier" if you don't have one implemented in your class), you can use this:

NSLog(@"deallocing %p", self);

This can be rather helpful if you have more than one instance of a particular class and are trying to determine which is getting dealloc'd when.

dmkash
Thank you dmkash, thats a good point, much appreciated.
fuzzygoat