ARCの知識は今日テストされましたが、私はthis articleに遭遇し、 "Nesting of statements"という見出しの下に例があります。彼らは上記の組み込みを示した例でARCはメソッドパラメータ内に割り当てられたオブジェクトを保持します
、ラインは緑の下線で強調表示関数内alloced文字列が最初に作成されたときに追加する際、再び+1カウント数+1を保持になるだろうと述べています配列の最後にnilされた後は、文字列の保持カウントは1だけ減少し、元の文字列の保持カウントは1になり、割り当てが解除されません。
私は、コンパイラは、少なくともあなただけの
[[NSString alloc] initWithFormat:@"Name 1"]];
を持っていた場合allocedされ、この文字列が何もないであろうから、そのようなオブジェクトは、実際に、最初は、カウントを保持していないようにするには十分にスマートだっただろうと想定しているだろうそれを指していて、自動解放プールが1の保持カウントを永久に持たずに終了したときに解放されます。それでは、なぜそれが関数のパラメータにあるときに、それは異なる振る舞いをしますか? (その行に1の保持カウントがあり、これは何とかメモリリークですか?そうでなければ、範囲の最後まで1の保持カウントを持つ可能性がありますが、その論理も同様に適用されます私は仮定します)
この記事は間違っていますか、またはARCの私の理解に欠陥がありますか?
記事が間違っています。そしてなぜ彼らが 'alloc init'を表示し続けているのか、メソッドスコープで使うための便利なメソッドを持っています... Weird。 –
記事は間違っています(下記のように)。 http://clang.llvm.org/docs/AutomaticReferenceCounting.html#retained-return-values:* "このような関数やメソッドから返された結果を受け取ると、ARCはその値をローカル変数の通常の最適化を条件として、その中に含まれている完全な式の終わりです。 "* - ' name = nil'と 'array = nil'の両方は、" ARC release memoryを助ける "必要はありません。 –