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 收到以下警告:“在此块中强烈捕获'请求'可能会导致保留周期。”

首先,这是正确的方法吗?我似乎找不到从 ASINetworkQueue 中删除特定 ASIHTTPRequest 的方法。其次,我需要担心来自 Xcode 的这个警告吗?

4

1 回答 1

0

关于您捕获块“容器”并形成循环的警告......只需说:

__weak ASIHTTPRequest *rw = request;

并在块中使用它。

至于开始的块方法。对我来说听起来并不完美,但我不知道更好的方法......

于 2012-11-08T17:32:53.013 回答