2012-04-17 2 views
0

메모리에 관한 질문이 있습니다. 아래 코드 &에 따르면 0x6868190 누수가 있습니까?objective-c 메모리 누수가 있습니까?

코드 :

self.point = [NSString stringWithFormat:@"R"]; 
NSLog(@"********First********%d",[point retainCount]); 
NSLog(@"********First********%p",point); 
self.point = [NSString stringWithFormat:@"A"]; 
NSLog(@"********Second********%d",[point retainCount]); 
NSLog(@"********Second********%p",point); 

로그 :

2012-04-17 20:27:49.838 test_[297:f803] ********First********2 
2012-04-17 20:27:49.838 test_[297:f803] ********First********0x6868190 
2012-04-17 20:27:49.839 test_[297:f803] ********Second********2 
2012-04-17 20:27:49.839 test_[297:f803] ********Second********0x6879500 
+0

게시물에 코드 서식을 추가하십시오. – mit3z

+5

보관 횟수를 기록하여 메모리 관리를 이해하려는 경우 잘못 처리하고 있습니다. –

+1

@ MikeWeller의 덧글은 과장되어서는 안됩니다. 보유 카운트를 잊어 버리면, 당신이 생각하는대로하지 않습니다. Apple의 문서에서 "이 방법으로 유용한 정보를 얻을 수있는 가능성은 거의 없습니다." – sosborn

답변

1

악기를 사용하여 메모리 누수를 검사하십시오. 보유 횟수가 0이 아니라는 사실은 반드시 누수가 있음을 의미하지는 않습니다. 이러한 객체는 필요한 경우 실행 루프 끝에서 해제됩니다.

stringWithFormat 호출은 보유 수 1 (자동 해제 됨) 인 오브젝트를 작성합니다. 그런 다음 속성은 retain/strong으로 선언됩니다.이 속성은 기본 객체가 릴리스 될 때 릴리스 될 속성을 추가합니다. 그러므로 그것은 두 가지입니다.

+0

도와 주셔서 감사합니다! 나는 더 많은 것을 알고있다. – user1297301

0

아니오 NSString 클래스에 의해 생성되는 그 NSStringautorealeased 있습니다.

2

메모리 누출 검사에 retainCount을 사용하지 마십시오. 내부 구현으로 예상치 못한 오류가 발생할 수 있기 때문입니다.

xcode에는 누출을 검사하기위한 적절한 도구가 있으므로 사용하도록 조언합니다.

1

내 웹 사이트 "When to use retainCount?"이 이에 해당합니다. 질문 7과 8을보십시오.

그러나 요약하면 아니오. 귀하의 변수는 누출되지 않도록 자동 수확됩니다 (dealloc에 출시하는 것을 잊지 않는 한).