2012-11-01 4 views
0

는 내가이@ ""이고 nil이 같은가요?

@property(retain) NSString* test; 

그것은 구현 파일에 synthezised되어 있습니다.

dealloc에서이 둘 모두 맞거나 틀린가요? I는 전무의 retainCount 및 @ ","로그인하면

self.test = nil; 

self.test = @""; 

, 그것은 0, -1로 각각 출력했다.

둘 다 동일한 결과를 산출하는지 궁금합니다.

미리 감사드립니다.

+1

. http://whentouseretaincount.com/ –

답변

5

먼저 무엇이든 retainCount를 사용하지 마십시오. 그것은 당신에게 거짓말을합니다. 두 번째로 보유 수는 부호가 없으므로 "-1"은 실제로 "가능한 가장 높은 보유 수"를 의미하며 이는 보유 및 해제가 해당 오브젝트에 대해 아무 것도하지 않음을 의미합니다. 셋째, nil에 대한 모든 메서드 호출은 nil/0을 반환합니다.

이제 해결되었습니다. nil과 @ ""는 동일하지 않습니다. nil은 0 번 주소에 대한 포인터이고 "no object"를 나타냅니다. @ ""는 문자가없는 완벽한 NSString 객체입니다.

+0

그래서 누출이 발생하지 않습니다. self.test = @ ""; 권리? – Aaron

+0

또한 dealloc에서 self.test = nil을 수행해야합니까? 우리가 이것을하지 않으면, 이것은 메모리 누수의 원인이 될 것입니까? – Aaron

+0

속성에 할당하거나 지정하지 않으면 누출이 발생할 수 없습니다. 누출의 원인은 오브젝트의 전체 수명 기간 동안 보유 및 릴리스의 총 수가 균형을 이루지 않는 경우입니다. 그건 기술적으로 ""결코 누출 될 수 없다는 것입니다 (그것은 특별한 유형의 객체입니다). 나는 그것을 무시하고 그것을 다른 어떤 물건처럼 취급하는 것이 가장 간단하다는 것을 안다. –

관련 문제