2012-04-23 14 views
0

iOSデベロッパーの初心者です。私は自分のプロジェクトでARCを使用しています。また、私はASIHttpRequestを使って作業を楽にしています。ご存じのように、ASIHttpRequestはARCをサポートしていません。私はそれを動作させるために-fno-objc-arcコンパイラフラグを追加しました。 今、私の質問があります。ARCを使用しているプロジェクトで「リクエスト」をリリースするにはどうすればよいですか?

NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"]; 
    __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request setCompletionBlock:^{ 
     NSData *responseData = [request responseData]; 
    }]; 
    [request setFailedBlock:^{ 
     NSError *error = [request error]; 
    }]; 
    [request startAsynchronous]; 
+3

ARCを使用すると、そのリリースを心配する必要はありません。 –

+0

そして、 'alloc'はないので、ARC以外の環境下でも解放する必要はありません... – SEG

答えて

0

これらのコードはARCを使用してファイルに存在するため、この「リクエスト」を解放する必要はありません。コンパイラは、リリースメソッドを挿入するのに役立ちます。しかし、ASIHTTPRequest.mファイル内のオブジェクトの場合は、-fno-objc-arcコンパイラフラグを追加してからコンパイラがreleaseメソッドを挿入しないため、それらを解放する必要があります(実際にはその必要はありません)。

1

そのARCと非ARCコードを混合する際、コンパイラはNSObjectsで正しいことをしないというのが私の理解:このような私のコードの一部かどうかはどのように「要求」オブジェクトを解放することができます。

Cocoaメソッドの命名規則に基づいて、responseDataは所有していない参照である必要があります。したがって、あなたはそれを保持/解放する責任を負うべきではありません。要求オブジェクトはそれを所有しています。

関連する問題