我正在使用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的这个警告是我需要担心的吗?
答案 0 :(得分:0)
关于警告你捕获块'容器'并形成一个循环......只需说:
__weak ASIHTTPRequest *rw = request;
并在块中使用它。
起始块方法。听起来不是很完美,但我不知道更好的方法......