2

我有一个将显示下载的图像和文本的视图。我想使用 ASIHTTPRequest 异步处理所有下载,但我不确定如何在下载完成时通知视图......

如果我将我的视图控制器作为 ASIHTTPRequest 的委托传递,然后我的视图被破坏(用户导航离开),当它尝试向我的视图控制器发送消息时它会优雅地失败,因为委托现在为零?

即如果我这样做:

UIViewController *myvc = [[UIViewController alloc] init];
request.delegate = myvc;
[myvc release];

现在做 myvc 和 request.delegate == 指向 nil 的指针吗?

这是自学的问题......我对一些基本概念有点模糊。

欢迎其他有关如何处理此问题的想法。

4

1 回答 1

3

更新:查看 ASIHTTPRequest的,它不保留其委托,因此您的代码必须确保委托尚未释放,或者nil在释放控制器之前将请求的委托属性设置为。

如果要运行多个异步 HTTP 请求,最好创建一个HTTPRequestManager类来充当所有HTTP 请求的委托。此类HTTPRequestManager将在您的应用程序的整个生命周期中保留在内存中,并且如果/当您的视图控制器被释放时,它可以优雅地处理失败。

我想澄清一下 Cocoa 的引用计数内存管理。重要的是要记住释放的对象不会自动设置为nil。向已删除的对象发送消息nil是完全合法的(并且什么也不做),但向已删除的对象发送消息是未定义的行为。保留指向已删除对象的指针是自找麻烦,这种活/死指针被称为僵尸。

于 2010-03-23T21:37:43.917 回答