• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-13 16:45:17 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

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

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



Best Answer-推荐答案


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

你有几个选项来解决这个问题:

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

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap