0

以下のコードでメモリリークが発生しました。ここで、self.firstURLConnは@property(nonatomic、retain)です。

NSMutableURLRequest* req = [[NSMutableURLRequest alloc] initWithURL:urlcachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60.0f];

self.firstURLConn = [[[NSURLConnection alloc] initWithRequest:req delegate:self] autorelease];

[req release];//memory leak here and with self.firstURLConn

ここでメモリがリークしている理由

4

3 に答える 3

1

Product > Analyze を実行したことがありますか? もしそうなら、私たちにメモリリーク問題のログを見せてください。

メモリ リークの問題があるコードの行を示すだけでなく、問題の原因となっているコードのステップも示します。

漏れツールと一緒にインストルメント ツールを使用することをお勧めします。コードの問題に関する詳細な情報が表示されます。

編集: req 変数が autorelease に失敗しました。req2回保管していたためです。このようにコードを変更します

NSMutableURLRequest* req = [[[NSMutableURLRequest alloc] initWithURL:urlcachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60.0f] autorelease];

self.firstURLConn = [[[NSURLConnection alloc] initWithRequest:req delegate:self] autorelease];

[req release];//memory leak here and with self.firstURLConn

あなたfirstURLConnが保持プロパティで宣言したためです。したがって、dealloc メソッドでは、nilこのプロパティに設定する必要があります

- (void)dealloc
{
    self.firstURLConn = nil;
    [super dealloc];
}
于 2012-05-03T09:16:51.223 に答える
0

firstURLConnは要求を保持し、要求はfirstURLConnが要求を解放するときにのみ割り当て解除されます。

于 2012-05-03T09:12:04.607 に答える
0

デリゲート メソッドは非同期に (将来的に) 戻るため、デリゲート メソッド内で NSURLConnection を解放する必要があります。autorelease を削除し、完了および失敗したデリゲート メソッドにリリースを追加します。

于 2012-05-03T17:23:31.737 に答える