2011-08-10 4 views
-2

가능한 중복 : 나는 다음과 같이 누설이
iPhone SDK:How can I fix this leakage?iPhone SDK : 어떻게이 누출 문제를 해결할 수 있습니까?

이 질문은, 이전과 다른, 심지어는 같은 클래스에,

,

@property (nonatomic,retain) NSMutableData *responseXMLData; 
@property (nonatomic,copy) NSMutableData *lastLoadedResponseXMLData; 

-(void)dealloc { 
[doc release]; 
doc=nil; 
[xmlBodyTemp release]; 
[responseXMLData release] ; 
responseXMLData=nil; 
[lastLoadedResponseXMLData release]; 
lastLoadedResponseXMLData=nil; 
[xmlBody release]; 
[super dealloc]; 
} 

enter image description here

두 번째 질문 :

self.responseXMLData = [self.lastLoadedResponseXMLData copy]; 

은 내가 dellaoc에서보다 한 번 더 다른 self.lastLoadedResponseXMLData을 해제해야합니까 : 나는 쓸 때 위에서 주어진 변수? 또는 delloc 만 eneough입니까? autorelease는 작동하는 것처럼 보입니다. 그러나 이유를 알지 못합니다.

+0

동일한 질문을 다시 보내지 마십시오. [iPhone SDK :이 누출 문제를 어떻게 해결할 수 있습니까?] (http://stackoverflow.com/questions/7015052/iphone-sdkhow-can-i-fix-this-leakage) . 오리지널 질문을 업데이트하거나 답변에 댓글을 달거나 더 나은 답변을 기다리십시오. 잠시 후 만족스러운 답을 얻지 못하면 현상금 배치를 고려할 수 있습니다. – PengOne

+0

@PengOne은 주요 누수 문제를 볼 수 없으며 스크린 샷이 완전히 다릅니다. 아니면 그냥 누군가를 downvote 장난? – Spring

+0

질문이 정확한지, 코드는 매우 유사하다는 점을 감안할 때, 나는 사람들이 투표를 하향 투표를하고 투표로 투표를 끝내는 것에 놀라지 않는다. –

답변

4

Apple에서 제공 한 Memory Management Programming Guide을 읽는 것이 좋습니다. 이렇게하면 할당을 잘 관리하는 방법을 더 잘 이해할 수 있습니다.

-

는 IMO (확인 다른 사람들이 동의하지 않음), 당신의 dealloc에 ​​할 필요는 release의 오브젝트입니다. 그들을 0으로 설정할 필요가 없습니다.

복사하려는 개체를 해제해야합니다. copy [] 일 때 보유 수는 1 씩 증가합니다. 그런 다음이 수를 self.responseXMLData에 할당하면 보유 수는 보유하기 때문에 다시 1 씩 증가합니다. 여기에서 할 수있는 가장 좋은 일은 자동 포기하는 것입니다. [[self.lastLoadedResponseXMLData copy]autorelease];

[1] 엄지 손가락의 간단한 규칙은 그 언제 당신 alloc, copynew, 또는 retain 무엇인가, 당신은 그것을 소유, 당신은 당신이 소유권을했다하는 범위에서 해제 할 책임이 있습니다 .

+0

그렇습니다. 정확하게 autorelase가 작동하고 leakege를 해결합니다. 그러나 dellaoc이 enoough이면 어떻게해야합니까? – Spring

+0

및 주요 문제는 무엇입니까? – Spring

+0

초과 보관 된 오브젝트가 있으면 dealloc은이 경우 충분하지 않습니다. 복사 된 범위에서 [self.lastLoadedResponseXMLData copy]를 해제하지 않으면 보유 개수가 2로 끝나고 dealloc 메소드에서 해제하는 동안 올바른 시점에 한 번만 해제되므로, 아직도 하나의 참조가 매달려 있습니다. 이 작업을 수행하는 올바른 방법은 복사본을 자동으로 내 보낸 다음 dealloc 메서드에서 해당 속성이 보유하고있는 참조를 해제하는 것입니다. – csano

관련 문제