2

是否还有其他人对 ASIHTTPRequest 有此问题?似乎当我在将委托设置为实例的后台线程中执行异步请求时,我可能会遇到麻烦,因为可以在请求(放入 NSOperationQueue)返回回调之前释放委托。

似乎 ASIHTTPRequest 没有保留它的委托 - 另一方面,Apple 的 NSURLConnection 确实保留了委托(“NSURLConnection 在初始化时保留其委托。它在连接完成加载、失败或取消时释放委托。”) .

我是否应该确保在后台线程中执行同步 ASIHTTPRequests 以使其工作(而不是异步请求)?或者我应该转储 ASIHTTPRequest?还是我只是疯了?

4

2 回答 2

7

假设您使用的是最新版本的 ASIHTTPRequest,使用它(并避免崩溃)的正确方法是:

委托人应该保留请求(并且请求不应该保留委托人)

当委托被销毁时(或当您想取消请求时),委托应执行以下操作:

[request setDelegate:nil];    
[request cancel];
[request release];

你不应该以这种方式发生任何崩溃。(几个月前我重写了 ASIHTTPRequest 中的委托处理,正是为了避免其中一些问题,我与 Apple 的人员核实了这是在这样做之前处理事情的正确方法。我的更改都在官方 ASIHTTPRequest 存储库中在 github 上,尽管此后没有正式发布 - 即这些更改不在 v1.7 版本中,因此在 v1.7 或更早版本中,遵循上述建议时您仍然可能会看到崩溃。)

于 2010-10-07T07:46:34.367 回答
0

我不知道 ASIHTTPRequests 是否不保留该对象,但是您是否尝试在执行时保留它并在最后释放它?

这个非常好的包装器我从来没有遇到过问题^^

于 2010-10-06T07:40:08.440 回答