0

NSURLConnectionを使用する場合、インスタンス化されるメソッドの最後で解放できますか?

NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
...
...
[connection release];

次に、非同期プロセスを続行しますか、それとも保持する必要がありますか?

4

4 に答える 4

2

完了したら、接続オブジェクトを解放する必要があります。

NSURLConnectionデリゲートメソッドでこれを解放します-

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
于 2012-05-29T08:15:33.867 に答える
0

「割り当て」によって接続を保持する必要があります。理由は次のとおりです。接続を管理する必要があります。たとえば、接続をキャンセルします。

于 2012-05-29T08:20:26.003 に答える
0

可能な限り、便利なアロケータを使用するようにアドバイスします。返されるオブジェクトは自動リリースされます。つまり、手動でリリースしたり保持したりすることを心配する必要はありません。経験則以上で質問に答えるには、次を使用します。

connectionWithRequest:delegate:

そして、あなたは行ってもいいです。

于 2012-05-29T08:28:13.097 に答える
0

最良の方法は、connectionWithRequest:Delegate:を使用して、自動解放されるようにすることです。

ただし、デリゲートをゼロにする機会を得るには、接続が終了するまでNSURLConnectionへのポインタを保持する必要もあります。そうしないと、接続が戻らないが、接続によって呼び出される前にデリゲートの割り当てが解除された場合、クラッシュします。(エラーが発生します:割り当て解除されたインスタンスにメッセージが送信されました)

したがって、NSURLConnectionへのポインターを保持し、接続が戻ったときにポインターをnilに設定するのが最善です。したがって、ConnectionDidFinishLoadingで

connection = nil;

これで、デリゲートの割り当てが解除された場合、deallocメソッドに何かを入れるか、デリゲートがviewControllerの場合はviewDidUnloadに入れることができます。

if (connection != nil) connection.delegate = nil;
于 2012-05-29T10:31:54.120 に答える