2011-08-10 78 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]; 

我需要釋放self.lastLoadedResponseXMLData一次其他比我dellaoc做?或者只有delloc是足夠的? autorelease似乎工作,但沒有得到的想法爲什麼

+0

請不要重新發布相同的問題:[iPhone SDK:我該如何解決這個漏洞?](http://stackoverflow.com/questions/7015052/iphone-sdkhow-cani-i-fix-this-leakage) 。而是更新您的原始問題,評論答案,或者等待更好的答案。過了一段時間,如果你還沒有一個滿意的答案,你可以考慮給予獎勵。 – PengOne

+0

@PengOne你不能看到主要泄漏問題,屏幕截圖在這裏完全不同嗎?或者你只是在愚弄某個人而貶低某人? – Spring

+0

考慮到問題是完全相同的標題,代碼非常相似,我並不感到驚訝的人是downvoting和投票結束重複。 –

回答

4

我強烈建議您通讀蘋果提供的Memory Management Programming Guide。這會讓您更好地瞭解如何更好地管理您的分配。

-

IMO(不知道其他人會同意),所有你需要的dealloc做的是release你的對象。沒有必要將它們設置爲零。

您需要釋放正在複製的對象。當你的東西,保留計數增加1.然後當你將它分配給self.responseXMLData時,保留計數再次增加1(因爲屬性保留)。在這裏做的最好的事情是自動釋放它。 [[self.lastLoadedResponseXMLData copy]autorelease];

[]拇指的簡單規則是,任何時候你alloccopynew,或retain東西,你擁有它,而你負責在你把所有權範圍釋放它。

+0

是的,完全自動再生酶的作品,解決了一個騙局,但爲什麼我會這樣做,如果dellaoc是足夠的? – Spring

+0

以及主要問題呢? – Spring

+0

在這種情況下,由於您有一個過度保留的對象,dealloc不夠用。通過在複製範圍內不釋放[self.lastLoadedResponseXMLData副本],最終的保留計數爲2,並且在dealloc方法中將其釋放時,您只需釋放一次即可,我們仍然有一個參考。執行此操作的正確方法是自動釋放副本,然後釋放該屬性在dealloc方法中保留的引用。 – csano