1

非同期リクエストNSURLConnectionとそのデリゲート メソッドをカプセル化するクラスを実装しました。ビューのボタンがタップされるたびにビュー コントローラーでこのクラスのインスタンスを作成し、ネットワーク リクエストを行うように要求します。

- (IBAction)getData:(id)sender
{
   // Perform network request
   Updater *updater = [[Updater alloc] init];
   [updater queryService:self.date];
}

そのようなqueryService:方法は次のようなものです:

- (void)queryService:(NSDate *)date
{
   self.responseData = [NSMutableData data];

   NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:kTimeout];
   NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
}

Updaterは非同期操作を実行しているため、ローカル変数として宣言したインスタンスが呼び出されるまで保持されるか、呼び出し元のビュー コントローラーでのプロパティを作成するかどうかupdaterconnection:didFailWithError:わかりませんconnectionDidFinishLoading:。ARCを使用しています。strongUpdater

ありがとう!

4

2 に答える 2

2

はい、接続が終了するまで保持されます (失敗、成功 ecc)。これは、Updater インスタンスが のデリゲートであるために発生しますNSURLConnection

ドキュメント内NSURLConnectionで読むことができます:

注: ダウンロード中、接続はデリゲートへの強力な参照を維持します。接続の読み込みが完了するか、失敗するか、またはキャンセルされると、その強い参照が解放されます。

于 2013-07-14T19:41:06.380 に答える