次のコードが強い参照サイクルにつながるかどうか不思議ですか?enumは関連オブジェクトを保持していますか?
enum Type {
case some(obj:Any)
}
class Entity {
var type:Type
init() {
type = Type.some(obj:self)
}
}
次のコードが強い参照サイクルにつながるかどうか不思議ですか?enumは関連オブジェクトを保持していますか?
enum Type {
case some(obj:Any)
}
class Entity {
var type:Type
init() {
type = Type.some(obj:self)
}
}
はい。 Any
は暗黙的に強いです。参照型を渡すと、それは強力な参照になります。エニュメントを「保持」するものはないため、「サイクル」ではありませんが、値が存在するかぎり(または値のコピー)、Entity
が保持され、割り当てが解除されません。
これが真ではない場合を想像してください。 .some(obj: NSObject())
には何が含まれますか? Type.some
が保持カウントを増加しなかった場合、NSObject
は消滅します。
BTW、これは容易にかつ有効Entity
にdeinit
方法を作成することによって探求されている(これはOptional
に非常に類似しているので、多くのT?
が直ちにnil
なるので、それは、非常に驚くべきことであろう)。
として扱うので、 'type'プロパティはenumの場合にそれをラップすることによって自己を保持しませんか? –
私はdeinitを使ってチェックしました。 'type = Type.some(obj:self)'まで呼び出されませんでした。 –
このコードは、1)オブジェクトが作成されていない、2)コードがまったくコンパイルされていないため、参照サイクルを作成できません。 @ MartinR、 –
。それを擬似コード –