有人可以解释什么时候什么时候不使用一个“弱”分配给一个委托指针在Swift,为什么?
我的理解是,如果你使用一个协议,没有定义为一个类,你不能,也不想,将你的委托指针分配到弱。
protocol MyStructProtocol{ //whatever } struct MyStruct { var delegate: MyStructProtocol? }
但是,当您的协议被定义为类类型协议,那么你想要将你的委托设置为弱指针?
protocol MyClassprotocol:Class{ //whatever } class MyClass { weak var delegate: MyClassprotocol? }
你通常使类协议(由类关键字定义)弱,以避免“强参考周期”(以前称为“保留周期”)的风险。如果不能让代理弱,并不意味着你固有的有一个强的参考周期,但只是你可以有一个。
对于struct类型,强的引用循环风险大大减少,因为结构类型不是“引用”类型,因此更难创建强的引用循环。但是如果委托对象是一个类对象,那么你可能想使协议成为一个类协议,并使其弱。
在我看来,使类代表弱化只是部分缓解了强大的参考周期的风险。这真的是一个“所有权”的问题。大多数委托协议是这样的情况,其中所讨论的对象没有声明对代理的所有权的业务,而仅仅是所讨论的对象正在提供向代理通知某事(或请求某事)的能力。
原文地址:https://www.jb51.cc/swift/320830.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。