gpt4 book ai didi

objective-c - 内存管理和异步操作 : when does an object become nil?

转载 作者:行者123 更新时间:2023-12-04 06:56:23 24 4
gpt4 key购买 nike

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

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

即如果我这样做:

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

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

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

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

最佳答案

更新:看着source code for ASIHTTPRequest ,它不保留它的委托(delegate),所以你的代码要么必须确保委托(delegate)没有被释放,要么将请求的委托(delegate)属性设置为 nil在释放 Controller 之前。

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

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

关于objective-c - 内存管理和异步操作 : when does an object become nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2503775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com