当前位置:  开发笔记 > IOS > 正文

Swift委托协议无法阻止保留周期问题

如何解决《Swift委托协议无法阻止保留周期问题》经验,为你挑选了0个好方法。

在Swift中,如果我创建一个委托协议,它可以通过类和结构符合.

protocol MyDelegate {
  // Can be conformed to by class or struct
}

当我宣布代表时,问题出现了.如果委托是一个类实例,我希望变量是弱的,以避免保留循环.如果它是一个结构,就没有这样的需求 - 实际上,Swift不允许我使委托变量变弱.注意:我知道如何创建一个弱委托,但关键问题是 - 如果你创建一个可能很弱的委托协议,除非你只使它符合类,否则你不能强制执行保留周期.

class MyClass {
  // Want weak var here to avoid cyclical reference
  // but Swift won't allow it because MyDelegate can be
  // conformed by struct as well.  Dropping weak means
  // cyclical reference cannot be prevented
  weak var delegate: MyDelegate?
}

class MyConformingClass: MyDelegate {

}

or

struct MyConformingStruct: MyDelegate {

}

似乎我们需要在任何时候都将这个协议声明为类,因为非常规委托协议无法阻止保留周期:

protocol MyDelegate: class {

}

Swift允许你以这种方式射击自己的事实似乎违背了其安全设计理念.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有