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

Myk*_*yuk 7 swift

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

enum Type {
    case some(obj:Any)
}

class Entity {
    var type:Type
    init() {
      type = Type.some(obj:self)
    }
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*ier 6

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

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

顺便说一下,通过创建deinit方法可以轻松有效地探索这个问题Entity.