我使用ASIHTTP以我的视图控制器作为委托运行http请求,如果用户在请求完成之前离开视图控制器,我在ASIHTTP代码中得到一个执行if(委托)的EXC_BAD_ACCESS ......)
我的视图控制器dealloc中有什么必须做的吗?如果用户离开,我想简单地删除请求。
答案 0 :(得分:5)
这类问题的最常见原因是ASIHTTPRequest对象仍处于活动状态,其委托字段指向现在已销毁的对象。当ASIHTTPRequest尝试告诉委托请求已完成等时,将发生EXC_BAD_ACCESS。
asihttprequest委托对象的dealloc方法应具有:
request.delegate = nil;
[request cancel]
[request release]
如果您一次只有一个请求处于活动状态,则必须在启动新请求的任何位置使用相同的代码,以确保正确取消任何先前的请求。
如果您有多个请求处于活动状态,则需要跟踪所有请求,并取消并取消所有请求的代理。
作为参考,我一直在使用ASIHTTPRequest约18个月,并为与取消请求相关的困难竞争条件做出了一些修复。