2011-08-10 12 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

2番目の質問:私が書くとき、上で与えられた変数で:

self.responseXMLData = [self.lastLoadedResponseXMLData copy]; 

は、私がdellaocに私がやったよりもself.lastLoadedResponseXMLDataもう一度他解放する必要がありますか?またはdellocだけがenooughですか? 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オブジェクトです。それらを無制限に設定する必要はありません。

コピーしているオブジェクトを解放する必要があります。 copy []の場合、保持カウントは1増加します。次に、それをself.responseXMLDataに割り当てると、保持カウントは1増加します(プロパティは保持されるため)。ここで行うべき最善のことは、それを自動リリースすることです。 [[self.lastLoadedResponseXMLData copy]autorelease];

[]親指の最も簡単なルールは、あなたがalloccopynew、またはretain何か任意の時間は、あなたがそれを所有し、あなたが所有権を取っている範囲でそれを解放する責任だということです。

+0

はい、正確にオートリアーゼが動作し、リークを解消しますが、もしdellaocがenoeoughならば、どうすればいいのですか? – Spring

+0

と主な問題はどうですか? – Spring

+0

この場合、過剰保持されていたオブジェクトがある場合、deallocで十分ではありません。コピーされたスコープ内で[self.lastLoadedResponseXMLData copy]を解放しないと、保持カウントは2になります。deallocメソッドで解放する際に正しいときは、一度だけ解放します。つまり、まだ1つのリファレンスがぶら下がっています。これを行う正しい方法は、コピーを自動解放し、そのプロパティがdeallocメソッドで保持している参照を解放することでした。 – csano

関連する問題