2011-09-06 70 views
0

我有一個for循環,它發送多個ASIHTTPRequests:ASIHTTPRequest - 取消多個請求的最佳做法?

for (int i = 0; i < 10; i++) { 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request setDelegate:self]; 
    [request setDidFinishSelector:@selector(requestDone:)]; 
    [request setDidFailSelector:@selector(requestWentWrong:)]; 
} 

安全地處理委託被釋放前的請求完成後,我想取消這些請求;我怎麼能做到這一點?將所有請求存儲在NSMutableArray中?或者我可以使用隊列來實現嗎?非常感謝你的幫助!

斯特凡

回答

4

最好的解決方案取決於你的架構和應用需求 - 如。你有多個http請求,只有一些你可能想取消?

這裏有一個解決方案 - 它會取消並刪除已分配到默認隊列正在進行請求所有委託:

for (ASIHTTPRequest *req in ASIHTTPRequest.sharedQueue.operations) 
{ 
    [req cancel]; 
    [req setDelegate:nil]; 
} 
[queue setDelegate:nil]; 
+0

看起來不錯;這是否意味着我不需要使用該請求作爲ivar並將代碼放入dealloc方法中? – swalkner

+0

是的,可能 - 但要小心。您可能想在viewDidDisappear中執行此操作,因爲可能會在另一個視圖啓動新的http請求後調用dealloc。一個ivar或每個視圖控制器的隊列可以有很大的意義,但是這些只是你可以做出的架構決策(在你的問題中沒有足夠的細節來建議這是你的應用的正確/最佳方法)。 – JosephH

+0

我知道,我的問題很一般;但我認爲你幫了我很多;不過我把它放在我的dealloc中;可能我在請求中設置了userInfo-dictionary,所以我只取消屬於那個viewcontroller的請求。謝謝! – swalkner