何が起こるかを理解するためにコードが何をするか見てみましょう:
UITextField* txtField = [arr objectAtIndex i];
これは配列内の値のコピーNSMutableArray
を作成し、内の値は参照であり、その値を variable に格納しますtxtField
。暗黙的に定義されているようtxtField
に、強力な参照を保持するために、ARC は (最適化の対象となります) 参照に所有権を登録します (別名「保持」)。次の行:
txtField = nil;
nil 参照値を に格納しtxtField
ます。強力な参照を保持しているためtxtField
、どのストアでも、ARC は変数に格納されている以前の参照値の所有権を放棄 (別名「リリース」) します。
配列は決して変更されません。その内容を反復処理し、各値をコピーし、その値を保持し、その値を解放しました。最後に次のように書きます。
arr = nil;
に nil 参照値を格納しarr
ます。強力な参照を保持しているためarr
、どのストアでも ARC は変数に格納されている以前の参照値の所有権を放棄 (別名「リリース」) し、その以前の値は への参照でしたNSMutableArray
。配列の所有者が他にいない場合、配列は破棄されます。配列が破棄されると、含まれるすべての値 (この場合はUITextField
インスタンス) の所有権を放棄し、それらの所有者が他にいない場合、それらは破棄されます。 ...
したがって、ほとんどの場合、必要なのは次のとおりです。
arr = nil
しかし、あなたはそれを必要としないかもしれません. Asarr
は、有効期間が終了したとき (ローカル変数の場合はその宣言を含むブロックまたはメソッドの終わり、インスタンス変数の場合はインスタンスが破棄されたとき) に強い参照を保持し、ARC はその所有権を放棄します。
HTH