0

私はASIHTTPRequestを使用しています(私は知っています、それは維持されていません-それは問題ではありません;それは機能し、それは私のアプリが構築されているものです)ASINetworkQueueを介して一連のHTTPリクエストを実行します.

問題は、キューに多くのリクエスト (数千) があり、実行に時間がかかることです。実行中に、アプリ内のデータの一部が変更され、リクエストの一部が不要になる場合があります。リクエストが実行される直前に各リクエストで検証メソッドを実行したいと思います。検証メソッドがチェックアウトされない場合は、そのリクエストをキャンセルして次のリクエストに進みます。

現在、次のコードを使用して ASIHTTPRequests を作成しています。

ASINetworkQueue *myQueue = [ASINetworkQueue queue];
NSURL *URL = [NSURL URLWithString:@"http://mywebsite.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setStartedBlock:^{
    NSLog(@"Request started: %@", request.url.absoluteString);
}];
[request setCompletionBlock:^{
    NSLog(@"Request completed: %@", request.url.absoluteString);
    // do some code here to clean up since it's finished
}];
[myQueue addOperation:request];

私の現在の考えは、startedBlock に何かを入れることです。

[request setStartedBlock:^{
    NSLog(@"Request started");
    if (![self myValidationMethod]) {
        [request cancel]; // <----------
    }
}];

ただし、これを行うと、Xcode から次の警告が表示されます。「このブロックで「リクエスト」を強力にキャプチャすると、保持サイクルが発生する可能性があります。

まず、これはこれを行うための正しい方法ですか? 特定の ASIHTTPRequest を ASINetworkQueue から削除する方法が見つからないようです。第二に、Xcode からのこの警告は、私が心配する必要があるものですか?

4

1 に答える 1

0

ブロック「コンテナ」をキャプチャしてサイクルを形成する警告について...ただ言う:

__weak ASIHTTPRequest *rw = request;

ブロックでそれを使用します。

開始されたブロックアプローチについて。私には完璧に聞こえませんが、より良いアプローチを知りません...

于 2012-11-08T17:32:53.013 に答える