ASIHTTP - 离开视图并得到EXC_BAD_ACCESS

问题描述:

我使用ASIHTTP作为委托使用我的视图控制器运行一个http请求,如果用户在请求完成之前离开视图控制器,我会在ASIHTTP代码中获得一个EXC_BAD_ACCESS正在做一个if(委托...)ASIHTTP - 离开视图并得到EXC_BAD_ACCESS

在我的视图控制器dealloc中有什么我必须做的吗?如果用户离开,我只想简单地删除请求。

+2

这通常是您的代码有问题。发布一些,我们会试着破译这个问题。 – esqew 2011-06-13 01:24:13

+0

如果发生崩溃,则会出现回溯或崩溃日志。发表它。 – bbum 2011-06-13 05:40:19

像这样的问题最常见的原因是ASIHTTPRequest对象仍处于活动状态,并且其委托字段指向一个现在销毁的对象。当ASIHTTPRequest尝试告诉代理请求已完成时,EXC_BAD_ACCESS将会发生,依此类推。

你的dealloc方法为是asihttprequest代表应具备的对象:

request.delegate = nil; 
[request cancel] 
[request release] 

如果你有在同一时间只有一个请求有效,你必须有相同的代码的任何地方,你开始一个新的请求,以确保任何以前的请求被正确取消。

如果您有多个请求处于活动状态,则需要跟踪所有请求,并取消它们全部的委托。

作为参考,我一直在使用ASIHTTPRequest约18个月,并且已经为与取消请求有关的困难竞赛条件提供了一些修复。

+0

您不必释放请求。 – peterp 2011-06-13 08:18:10

+0

@peterp不知道我明白了:如果你不释放请求,你会得到一个内存泄漏。 (并且您必须保留请求,否则您无法保证它仍然会在您的dealloc方法中取消。) – JosephH 2011-06-13 08:22:43

+0

@josephH您不必保留它,因为您不必保证它应该在你的dealloc方法中。如果它不在dealloc方法中,那么你就再也没有问题了。 – peterp 2011-06-13 08:25:16