2016-11-24 2 views
0

次の例では、localVariableのスコープは何ですか?グローバル配列に追加されるローカル変数の有効範囲は何ですか?

anArray[0] === localVariableのオブジェクトはありますか? は、Exampleがスコープから外れるまで持続します(構築されている場所から)。それはいくつかの他の変数/配列/セット/に追加されない限り

class Example { 
    var anArray: [DataClass] = [] 

    init() { 
     let localVariable = DataClass() 
     anArray.append(localVariable) 
    } 
} 

class DataClass { } 
+0

初期化子の終了後にlocalVariableは存在しなくなります。しかし、その値はまだanArrayの内部に保持されています。 DataClassのインスタンスは、もう誰もそれを参照しなくなったときにのみ割り当てが解除されます。つまり、Exampleインスタンスが割り当て解除されるとすぐにDataClassも解放されます(外部からanArrayにアクセスしてその値を取得しない場合) – luk2302

+0

あなたが遭遇する問題?問題がありますか、あなただけが興味がありますか? – Jelle

+0

@ luk2302あなたは正しいと思いますが、「価値」についてのあなたの言葉は私に関係しています。それはクラスなので、オブジェクトへの実際の参照がコピーされると思います。 – sdasdadas

答えて

1

アレイにそれを追加する(例えば、インスタンスが削除されたときに)アレイが破壊されるまで、そうです、それが存在する、保持カウントをインクリメントします他の場所でも参照してください。

+1

ありがとう、それは私が後にしたものです! – sdasdadas

+1

ちょっとした警告:サイクルを保持するか、自己参照すると、オブジェクトが予想より長く(または永遠に)生きている可能性があります。例えば。クロージャ(ブロック)やタイマー、非弱いデリゲートを使用している場合に発生する可能性があります。 – Jelle

関連する問題