2012-07-16 3 views
0

NSLog를 사용하여 단말기에서 객체의 보유 개수를 인쇄하려고합니다. 여기 내 코드는 다음과 같습니다.개체의 보유 수를 인쇄하는 방법은 무엇입니까?

NSNumber *myInt=[[NSNumber alloc] initWithInteger: 100]; 
NSLog(@"myInt retain count=%d",[myInt retainCount]); 

결과는 1이어야하지만 터미널에있는 것은 -1입니다. 나는 % d 대신에 % u를 사용하려고 시도해 4294967295를 얻었습니다. 왜 이런 일이 일어나는 지 아는 사람이 있습니까? @bbum 여기에 도착하기 전에

+1

'retainCount'는 쓸모가 없습니다. 전화하지 마세요. 지금보고있는 것은 구현 세부 사항입니다. 리턴 된 NSNumber는 아마도 * 태그가 붙은 포인터 *이므로 할당 및 유지할 것이 없습니다. – bbum

+0

그래서 returnCount 기능에 대해 이야기하는 모든 책은 간단히 말해서 엉망입니다. –

+1

그들은 헛소리보다는 오해 될 수 있지만 부정확합니다. –

답변

3

나는이 말을 얻을 :

그것은 당신이 기대하는 답을 제공하지 않는 코드

-retainCount에 의존하지 마십시오. 해답은 -1입니다. 프레임 워크가 여러분이 등 뒤에서 모르는 일을하고 있기 때문에 올바른 답이라고 생각하지 않습니다. 자동 참조 계산 (ARC)을 사용하거나 수동 보유/해제를 사용해야하는 경우 -retainCount 방법을 사용하지 않고 메모리 관리 지침을 따르십시오.

+0

내 코드는 몇 가지 예를 기반으로합니다. Apple이 Objective-C를 어느 시점에서 변경했기 때문에 retainCount가 이전처럼 작동하지 않는다는 의미입니까? –

+0

아니오; retainCount는 매우 제한된 경우를 제외하고는 절대로 신뢰할 수 없습니다. –

+0

ARC는 retainCount가 반환해야하는 것을 반환 할 예정입니까? 그 때를 유지하는 것은 어떨까요? 그것은 또한 오동작입니까? –