2013-05-24 6 views
-1

중복을 표시하지 마십시오 : - 나는 몇 줄 alloc 후에 RetainCount가 -1입니까?

NSString *str = [[NSString alloc] init]; 
str = @"Test"; 
NSLog(@"%d",[str retainCount]); 

을 생성하고 출력은 -1 호야는 설명한다.

+0

그래도 복제본입니다. www.whentouseretaincount.com을 참조하십시오. – bbum

+1

심지어 속임수 였는지 알지도 못한다 –

+0

어쨌든 결코 해제되지 않는 상수 문자열을 요구하기 때문에 RetainCount는 -1입니다. –

답변

7

내가 지적한 질문의 속이다. UINT_MAX를 부호있는 정수로 인쇄하기 때문에 -1입니다. RC는 컴파일러에 의해 생성 된 싱글 톤 문자열이므로 효율적으로 할당되거나 할당 취소되지 않기 때문에 -1입니다.

이 패턴은 :

NSString *str = [[NSString alloc] init]; 
    str = @"Kashyap"; 

는 이해되지 않는다; 문자열 인스턴스를 할당하고 첫 번째 행에 str에 대한 참조를 할당 한 다음 두 번째 행에서 해당 참조를 즉시 덮어 씁니다 (ARC를 사용하지 않는 경우 첫 번째 문자열을 유출합니다).

반 패턴을 옹호하는 안내서 또는 책이있는 경우이를 지적하십시오.

관련 문제