Search code examples
iphoneobjective-cretaincount

Weird behaviour with retainCount


When I am logging retain count with NSArray and NSString objects, I am having uneven behavior. See the code below,

NSArray *aryTemp = [NSArray arrayWithObjects:@"One",nil];
NSLog(@"Retain Count :%d",[aryTemp retainCount]);

NSArray *aryTemp2 = [[NSArray alloc] initWithObjects:@"One",nil];
NSLog(@"Retain Count :%d",[aryTemp2 retainCount]);

NSString *strTemp = @"One";
NSLog(@"Retain Count :%d",[strTemp retainCount]);

NSString *strTemp2 = [[NSString alloc] initWithString:@"One"];
NSLog(@"Retain Count :%d",[strTemp2 retainCount]);

And this is the output I am getting

2011-03-01 19:19:32.410 Test[14607:207] Retain Count :37
2011-03-01 19:19:32.412 Test[14607:207] Retain Count :1
2011-03-01 19:19:32.413 Test[14607:207] Retain Count :2147483647
2011-03-01 19:19:32.413 Test[14607:207] Retain Count :2147483647

What is the wrong with the code??

Thanks

Pratik Goswami


Solution

  • You should never use -retainCount, because it never tells you anything useful. The implementation of the Foundation and AppKit/UIKit frameworks is opaque; you don't know what's being retained, why it's being retained, who's retaining it, when it was retained, and so on.

    Also see: StackOverflow | when to use retainCount for an excellent recount of why you don't use retainCount.

    And to echo Dave DeLong: Please everyone go to http://bugreport.apple.com and request that -retainCount be deprecated. The more people that ask for it, the better.