gpt4 book ai didi

iOS:如何处理已发布的委托(delegate)

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

我有一个对象作为我的 View Controller 和我的网络服务之间的连接层。该对象接受一个委托(delegate),并在从服务器返回数据时通知该委托(delegate)。我遇到了一个问题,即委托(delegate)在运行 http 请求时被解除分配。当请求返回时,我的对象尝试调用委托(delegate)上的方法并且应用程序崩溃。

处理此问题的最佳方法是什么。我在几个地方读到你不应该保留你的委托(delegate),因为他们经常也保留对象,导致循环依赖。因此,如果我不能保留我的委托(delegate),我如何在调用方法之前检查它是否已被解除分配?

@property (nonatomic, assign) NSObject<ServerConnectionDelegate>* delegate;

最佳答案

如果委托(delegate)的生命周期长于工作对象的生命周期,通常你应该使用委托(delegate)模式。 (抱歉不确定这里的术语是否正确)。

您有几种解决方法:

  • 作为解决方法,您可以在对象的 dealloc 方法中将连接委托(delegate)设置为 nil。
  • 如果需要数据(可能供以后使用),您可以使用 NSNotification 通知代理任何连接事件,而不是代理模式。
  • 正如 Jack 在他的评论中所建议的那样,您可以让您的委托(delegate)成为连接的弱属性 - 如果您的项目正在使用 ARC,这可能是最好的解决方案

关于iOS:如何处理已发布的委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12733742/

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