2010-06-06 7 views
1

가능한 중복 :
NSNumber retain count issue객관적인 C - 릴리스 문제

안녕하세요, 나는 다음과 같은 코드가 있습니다

NSNumber *number = [NSNumber numberWithInt:5]; 
int i = [number retainCount]; 
[number release]; 
i = [number retainCount]; 
     [number release]; 
     i = [number retainCount]; 

문제가를 그 라인 2, 파라미터 i의 값은 2 이고, 라인 4의 값은 1이다. 다음 줄 6에서 값은 여전히 ​​1입니다. ????????

먼저 init * 번호 이후에 retaincount가 2이고 1이 아닌 이유를 이해하지 못합니다. 두 번째 이유는 내가 release 2 개월 후에 retaincount가 0이 아닌 이유를 이해하지 못합니까? 그것은 내가 개체가 retaincount 1.

답변

3

문제 머물 해제 몇 번 나던 문제 는 정말 당신이 무슨 일을하는지 알지 못한다면 당신은 개체의 'retainCount'를 보면 결코해야한다는 것입니다, 그것은 ' 너만 혼란 스러울거야.

NSNumber는 무언가를하고 있습니다. 나는 무엇을 확신하지 못한다. 그리고 나는 보통 상관하지 않는다. 비난을 만들면 그 비난을 풀어 낼 책임이 있습니다. 제가 책임을 완수하는 한, 모든 것이 제대로 이루어질 것입니다.

구체적인 예로 'NSNumber'에 대한 참조가 두 번 공개됩니다. 당신이 그 물건을 소유하고 있지 않으므로, 당신은 그 물건을 전혀 풀지 말아야합니다.


명확히하기 위해, 카운트 유지를 고려하면 안되는 이유는 자주 오도됩니다. 주석의 링크에서 @chuck을 인용하십시오.

누수가 의심되는 경우 보유 개수를 확인하는 것이 아니라 해당 목적을위한 실제 디버깅 도구로 확인해야합니다. 그리고 작성중인 코드의 경우 위에 링크 된 지침을 따르는 것이 가장 중요합니다.

+0

첫 번째 도움에 감사드립니다. 나는 왜 내가 그 객체를 소유하고 있지 않은지 이해하지 못한다. (나는 그것을 만든다!) 내가 만들지도 못한 객체가 있는가? 기능의 끝에서 죽은 것과 같은 대상? 내가 만드는 객체가 autorelease가있는 init인지 여부를 어떻게 알 수 있습니까? 감사합니다. – amir

+0

http://developer.apple.com/mac/library/iPad/index.html#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html – kubi

+0

일반적으로 'alloc', 'copy'또는 '새로운'개체를 만들려면 소유하고 있지 않습니다. – kubi