ASINetworkQueue中的ASIHTTPRequest:队列运行时取消请求

时间:2012-11-08 16:35:01

标签: iphone ios asihttprequest nsoperation nsoperationqueue

我正在使用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的这个警告是我需要担心的吗?

1 个答案:

答案 0 :(得分:0)

关于警告你捕获块'容器'并形成一个循环......只需说:

__weak ASIHTTPRequest *rw = request;

并在块中使用它。

起始块方法。听起来不是很完美,但我不知道更好的方法......