枚举是否保留其关联对象?

时间:2017-06-26 17:32:48

标签: swift

我很好奇下一个代码是否会导致强参考周期?

enum Type {
    case some(obj:Any)
}

class Entity {
    var type:Type
    init() {
      type = Type.some(obj:self)
    }
}

1 个答案:

答案 0 :(得分:5)

是。 Any含蓄强烈。如果您传递引用类型,它将是一个强引用。它不是一个“循环”,因为没有“保留”枚举,但只要值存在(或值的任何副本),它将保持Entity并防止它被释放。

想象一下,如果不是这样的话。 .some(obj: NSObject())包含什么?如果Type.some没有增加保留计数,则NSObject将会消失。 (因为这与Optional非常相似,所以非常令人惊讶,因为很多T?会立即成为nil。)

顺便说一句,通过在deinit上创建Entity方法,可以轻松有效地探索这一点。