gpt4 book ai didi

ios - 消息发送到解除分配的实例 ARC

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:56:07 27 4
gpt4 key购买 nike

我正在做一个从服务器下载图像并将其显示在 View 上的应用程序。我正在为此使用委托(delegate)。图像加载完成后,代理会向 View 发送消息以显示图像。

上述场景运行良好。但是,如果我从该特定 View 移出到任何其他 View ,则当图像加载完成时,委托(delegate)会尝试发送消息并导致错误。

我试过设置

imageFetcher.delegate=nil;

在查看didUnload。同样在调用下载类中的委托(delegate)方法之前,我检查委托(delegate)是否为零。

但我可以看到委托(delegate)对象不是 nil。

if(delegate!=nil)
{
[delegate imagefetcherView:self didLoadImage:image];
}

我该如何修复这个错误?

谢谢

最佳答案

不要依赖 viewDidUnload 进行任何清理。这仅在 iOS 6 之前的 iOS 版本中调用,并且仅在由于内存压力而卸载 View 时调用(而不是在您只是关闭/弹出 View 时)。

dealloc 方法或 viewDidDisappear 或任何合适的地方将您的委托(delegate)设置为 nil

关于选择您将 nil delegate 的方法的两个注意事项:

  1. 请注意,如果您推送/呈现另一个 View Controller ,即使当前 View Controller 尚未被关闭,viewWillDisappearviewDidDisappear 也会被调用.如果有问题的 View Controller 永远不会推送/呈现另一个 View Controller ,则仅依赖这些与消失相关的方法。

  2. 如果使用 dealloc 技术,请注意这仅在 delegate 是图像 getter 类的 weak 属性时有效(并且委托(delegate)通常应该是 weak)。如果 delegatestrongretain 属性,这将阻止 View Controller 的 dealloc 被调用。

顺便说一句,我了解到即使 View Controller 已被关闭,您仍继续获取图像。您可能不仅要nil 委托(delegate),还要取消请求。这取决于 (a) 您是否正在使用甚至允许取消的提取(例如 NSURLConnectionDataDelegate 方法或 AFNetworking 操作),如果是,(b) 您是否希望它取消或不是。但是,很容易占用宝贵的网络资源(尤其是在蜂窝连接速度较慢的情况下),即使用户不再需要请求也可以继续进行。这取决于您应用的具体情况。

无论如何,不​​要依赖viewDidUnload

关于ios - 消息发送到解除分配的实例 ARC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19301315/

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