取消正在进行的ASIHttpRequest请求的正确位置在哪里?这就是我取消操作的方法,但是当我从一个视图控制器转移到另一个视图控制器而不让请求完成时它会继续崩溃。取消请求工作正常,但当切换回第一个Viewcontroller时它会崩溃。
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
if(!DID_FINISH_REQUEST)
{
[requestNewReleases setDelegate:nil];
[requestNewReleases cancel];
[requestNewReleases clearDelegatesAndCancel];
}
}
答案 0 :(得分:3)
在ASIHttpRequest documentation中有一个请求在dealloc方法中被取消的示例:
在请求之前安全地处理被释放的委托 完成
请求不保留他们的代表,所以如果有可能你的代表 在您的请求运行期间,代理可能会被取消分配,这是至关重要的 您清除请求的委托属性。多数情况 如果你的代表要被解除分配,你就是这种情况 可能还想取消请求,因为你不再关心 请求的状态。
在下面的示例中,我们的控制器具有存储在a中的ASIHTTPRequest 保留实例变量。我们称之为clearDelegatesAndCancel方法 在我们发布我们的引用之前,它是dealloc实现 请求:
- (void)dealloc
{
[request clearDelegatesAndCancel];
[request release];
...
[super dealloc];
}
答案 1 :(得分:2)
这取决于您的架构和应用程序需求 - 例如。如果有多个http请求,只有部分需要取消?
然后解决方案 -
for (ASIHTTPRequest *req in ASIHTTPRequest.sharedQueue.operations)
{
[req cancel];
[req setDelegate:nil];
}
这将取消并删除已分配给默认队列的所有进行中请求的委托。