0

お立ち寄りいただきありがとうございます。

この静的アナライザーの警告は私を悩ませています ここに私のコードがあります

+ (INURLConnection*)createConnectionForRequest:(INHTTPRequest *)aRequest {

    INURLConnection* result = [[INURLConnection alloc] init];
    if(result){
        result.request = aRequest;
        result.error = nil;
    }
    return result;
}

「戻り値」行に、潜在的なメモリ リークの警告が表示されます (アナライザーを使用する場合)。これは作成メソッドです。消費するメソッドは次のようになります

INURLConnection *connection_tmp = [INURLConnection createConnectionForRequest:aRequest];
self.connection = connection_tmp, [connection_tmp release];

そのため、create connection は保持カウント 1 で戻り、self.connection は保持カウントを増やし、解放もあります。

ARC を使用できることはわかっていますが、ここで静的アナライザーがメモリ リークの可能性を示している理由を知りたいです。

この警告を無視しても安全ですか?

乾杯アルン

4

1 に答える 1

4

Cocoa メモリ管理の「ルール」の 1 つ「参照によって返されるオブジェクトを所有していない」に違反しているため、この警告を無視するのは安全ではありません。

関数の最後の行を次のように変更します

return [result autorelease];

Xcode の警告は消えるはずです。

主題に関する Apple のドキュメントBasic Memory Management Rulesを読む必要があります。このドキュメントでは、さまざまな規則についてもう少し詳しく説明しています。コードを読んだり使用したりする人は、コードがそのように動作することを期待するため、これらのルールに固執することをお勧めします。

于 2012-06-22T01:23:26.810 に答える