2017-06-26 8 views
6

次のコードが強い参照サイクルにつながるかどうか不思議ですか?enumは関連オブジェクトを保持していますか?

enum Type { 
    case some(obj:Any) 
} 

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

このコードは、1)オブジェクトが作成されていない、2)コードがまったくコンパイルされていないため、参照サイクルを作成できません。 @ MartinR、 –

+0

。それを擬似コード –

答えて

4

はい。 Anyは暗黙的に強いです。参照型を渡すと、それは強力な参照になります。エニュメントを「保持」するものはないため、「サイクル」ではありませんが、値が存在するかぎり(または値のコピー)、Entityが保持され、割り当てが解除されません。

これが真ではない場合を想像してください。 .some(obj: NSObject())には何が含まれますか? Type.someが保持カウントを増加しなかった場合、NSObjectは消滅します。

BTW、これは容易にかつ有効Entitydeinit方法を作成することによって探求されている(これはOptionalに非常に類似しているので、多くのT?が直ちにnilなるので、それは、非常に驚​​くべきことであろう)。

+0

として扱うので、 'type'プロパティはenumの場合にそれをラップすることによって自己を保持しませんか? –

+0

私はdeinitを使ってチェックしました。 'type = Type.some(obj:self)'まで呼び出されませんでした。 –

関連する問題