我很好奇下一个代码是否会导致强参考周期?
enum Type {
case some(obj:Any)
}
class Entity {
var type:Type
init() {
type = Type.some(obj:self)
}
}
答案 0 :(得分:5)
是。 Any
含蓄强烈。如果您传递引用类型,它将是一个强引用。它不是一个“循环”,因为没有“保留”枚举,但只要值存在(或值的任何副本),它将保持Entity
并防止它被释放。
想象一下,如果不是这样的话。 .some(obj: NSObject())
包含什么?如果Type.some
没有增加保留计数,则NSObject
将会消失。 (因为这与Optional
非常相似,所以非常令人惊讶,因为很多T?
会立即成为nil
。)
顺便说一句,通过在deinit
上创建Entity
方法,可以轻松有效地探索这一点。