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