2011-09-06 77 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