我使用ASIHTTPRequest(我知道,我知道,它沒有被維護 - 沒關係;它的工作原理和它是我的應用程序構建的)運行通過ASINetworkQueue發送一系列HTTP請求。ASINHTTPRequest in ASINetworkQueue:隊列運行時取消請求
問題是我的隊列會有很多請求(數千個),並且需要一段時間才能運行。在它運行的時候,應用程序中的一些數據可能已經改變,這會使一些請求不必要。我希望在運行之前對每個請求運行一個驗證方法,如果驗證方法沒有檢出,那麼它將取消該請求並繼續下一個請求。
現在,我使用下面的代碼創建我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的這個警告是我需要擔心的嗎?
ans在這裏: http://stackoverflow.com/questions/8859649/asihttprequest-asiformdatarequest-referencing-request-object-within-blocks-u/ 8874812#8874812 –