여기에 코드가 있습니다.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'를 사용하면 오류가 발생합니다. –