加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift委托 – 何时在委托使用弱指针

发布时间:2020-12-14 06:00:16 所属栏目:百科 来源:网络整理
导读:有人可以解释什么时候什么时候不使用一个“弱”分配给一个委托指针在Swift,为什么? 我的理解是,如果你使用一个协议,没有定义为一个类,你不能,也不想,将你的委托指针分配到弱。 protocol MyStructProtocol{ //whatever}struct MyStruct { var delegate
有人可以解释什么时候什么时候不使用一个“弱”分配给一个委托指针在Swift,为什么?

我的理解是,如果你使用一个协议,没有定义为一个类,你不能,也不想,将你的委托指针分配到弱。

protocol MyStructProtocol{
    //whatever
}

struct MyStruct {
    var delegate: MyStructProtocol?
}

但是,当您的协议被定义为类类型协议,那么你想要将你的委托设置为弱指针?

protocol MyClassProtocol:Class{
    //whatever
}

class MyClass {
    weak var delegate: MyClassProtocol?
}

我对么?在苹果的快速指南中,类协议示例不使用弱赋值,但在我的测试中,如果我的代理没有弱引用,我看到强参考周期。

你通常使类协议(由类关键字定义)弱,以避免“强参考周期”(以前称为“保留周期”)的风险。如果不能让代理弱,并不意味着你固有的有一个强的参考周期,但只是你可以有一个。

对于struct类型,强的引用循环风险大大减少,因为结构类型不是“引用”类型,因此更难创建强的引用循环。但是如果委托对象是一个类对象,那么你可能想使协议成为一个类协议,并使其弱。

在我看来,使类代表弱化只是部分缓解了强大的参考周期的风险。这真的是一个“所有权”的问题。大多数委托协议是这样的情况,其中所讨论的对象没有声明对代理的所有权的业务,而仅仅是所讨论的对象正在提供向代理通知某事(或请求某事)的能力。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读