当我用NSArray和NSString对象记录保留计数时,我的行为不均衡。见下面的代码,
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]);,这是我得到的输出
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密码怎么了??
谢谢
普赖克·戈斯瓦米
发布于 2011-03-01 15:07:47
您不应该使用-retainCount,因为它从来不告诉您任何有用的东西。基金会和AppKit/UIKit框架的实现是不透明的;您不知道保留了什么,为什么保留,谁保留,什么时候保留,等等。
请参见:StackOverflow | when to use retainCount,以获得关于为什么不使用retainCount的详细说明。
要回戴夫DeLong:请大家去http://bugreport.apple.com,请求不要推荐-retainCount。要求它的人越多,越好。
发布于 2011-03-01 14:39:39
2147483647没有错
2147483647是INT_MAX。INT_MAX是字符串文字的保留计数(即在代码中定义的@"foo“字符串)。这意味着他们永远不会被释放。
顺便说一句,不要使用retainCount。
发布于 2011-03-01 14:18:29
retainCount返回NSUInteger,你应该用这种方式打印它.
NSLog( @"%lu", (unsigned long)[blabla retainCount] );%d用于带符号的32位整数(int).NSUInteger在32位平台上定义为无符号int,在64位平台上定义为无符号长。上面的例子对于32/64位平台来说都是安全的。
https://stackoverflow.com/questions/5155559
复制相似问题