2011-08-10 9 views
0

私のconnectionDidFinishLoadingクラスに漏れがありますが、これをどのように修正できますか?iPhone SDK:プロパティ値の割り当てにメモリリークがありますか?

enter image description here

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

-(void)dealloc { 
[responseXMLData release] ; 
responseXMLData=nil; 
[lastLoadedResponseXMLData release]; 
lastLoadedResponseXMLData=nil; 
[super dealloc]; 
} 
+1

漏れたオブジェクトが楽器に従うタイプ:

ここにあなたがあなたのために作成するために、プロパティ/ @ののsynthesize @指示することができ、各種のget/setメソッドにいくつかの良い読書はありますか?それは 'NSMutableData'ですか? 'lastLoadedResponseXMLData'または' responseXMLData'のどこかに直接アクセスすることができます(プロパティを使わずに、あなたがやっているリリースを除いて)。 – sergio

+1

lastLoadedResponseXMLDataプロパティを変更する必要があるのは、最初に設定した後に変更する予定がある場合は、コピーではなく保持することです。 – mattacular

+0

@matt thxあなたのアドバイスは私の問題を解決し、答えを作り、私はそれを受け入れることができます – Spring

答えて

1
@property (nonatomic,copy) NSMutableData *lastLoadedResponseXMLData; 

、あなたはRETAIN使用する必要があります割り当て...以前の値にはリリースメッセージが送信されます。したがって、NSStringインスタンス(オブジェクトであり、おそらく保持したい)を割り当てることが想像できます。

copy - "オブジェクトのコピーを割り当てに使用することを指定します。...前の値にはリリースメッセージが送信されます。"基本的にはretainと同じですが、-reopyではなく-copyを送信します。 http://cocoawithlove.com/2010/06/assign-retain-copy-pitfalls-in-obj-c.html

1

あなたはresponseXMLDataのオブジェクトを作成している場所を教えていませんでしたか?あなたが持っている可能性が

self.responseXMLData = [[NSMutuableData alloc]init]autorelease]; 

こととあなたのdeallocメソッドで解放する必要があり、そのオブジェクトを初期化しているこれまでのところ、ちょうどあなたに

-(void)dealloc { 

    self.responseXMLData = nil; //which is equivalent to [responseXMLData release]; responseXMLData=nil; 
} 

0

だけの思考を、言う:

self.lastLoadedResponseXMLData = nil; 
self.lastLoadedResponseXMLData = self.responseXMLData; 
1つのリリースはのdeallocで行わ

する前に、あなたがちょうどnに設定可能な場合があるかもしれません以前のコピーを解放せずにlastLoadedResponseXMLDataに次のresponseXMLDataをコピーしますか? - 「時のオブジェクト上で呼び出されるべき保持を指定

@property (nonatomic,retain) NSMutableData *lastLoadedResponseXMLData; 

を保持:あなたが設定して変更しようとしている可変オブジェクトを操作しているので

関連する問題