这是retaincount代码。为什么NSNumber错误算作retaincount?
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
@autoreleasepool {
NSNumber *number = [[NSNumber alloc]initWithInt:10];
NSMutableArray *array = [[NSMutableArray alloc]initWithCapacity:0];
NSLog(@"retain count : %d",[number retainCount]);
[array addObject:number];
NSLog(@"retain count : %d",[number retainCount]);
[number release];
NSLog(@"retain count : %d",[number retainCount]);
[number release];
NSLog(@"retain count : %d",[number retainCount]);
[number release];
NSLog(@"retain count : %d",[number retainCount]);
}
return 0;
}
我预期的答案是
retain count : 1
retain count : 2
retain count : 1
retain count : 0
and then error
但实际运行结果如下。
[Switching to process 6363 thread 0x0]
2011-12-01 19:39:53.843 nsnumber[6363:707] retain count : -1
2011-12-01 19:39:53.846 nsnumber[6363:707] retain count : -1
2011-12-01 19:39:53.847 nsnumber[6363:707] retain count : -1
2011-12-01 19:39:53.847 nsnumber[6363:707] retain count : -1
2011-12-01 19:39:53.848 nsnumber[6363:707] retain count : -1
我无法理解这个结果。
为什么会出现这样的结果?
+1含义是你不能在ARC中使用retainCount。 http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html – JeremyP
AFAIK,这甚至不会在ARC下编译;使用'retainCount'会引发错误。 –