5

Apple のAdvanced Memory Management のドキュメントは非常によく書かれており、正確ですが、次の図が含まれているのではないかと思います。

(私のものは現在のリビジョン2011-09-28です)

ここに画像の説明を入力

この図では、 と の後にallocinit参照カウント (または保持カウント) が 1 であり、これが基本的なメモリ管理規則です。の後、retain参照カウントは 2 になりました。その後、クラス Ccopyがオブジェクトにメッセージを送信します。その後、オブジェクトの参照カウントは 2 のままです。新しいオブジェクトの参照カウントは 1 です。

ここまではルールに準拠していますが、次に、図の上部で、クラス Areleaseがオブジェクトにメッセージを送信し、参照カウントは 1 になるはずです。ダイアグラムには代わりに 2 があります。その後、クラス B もreleaseオブジェクトにメッセージを送信し、参照カウントは 0 になるはずです。図では代わりに 1 が表示されます。これは正しいですか、それとも図の読み方が違うのでしょうか、それとも上記の概念が正しくないのでしょうか?

4

2 に答える 2

4

この図は 2 つの点で少し誤解を招くと思います。1 つは、割り当てステップと保持ステップの場合、関連するカウントが操作の結果として発生することです。ただし、リリースステップでは、カウントは操作前の状態のように見えます。1 から 0 への遷移を引き起こす "Destroyed" メソッド存在しないため、これだけで十分です。

もう1つの誤解を招く部分は、保持カウントが本当にゼロになることはないと思います.ゼロになると信じて混乱する人を見てきました.

于 2012-05-13T17:21:02.543 に答える
0

単純に次のように読みます。解放メッセージの前に 2 の保持カウントがあり、その後は 1 です。

より良い理解のためには、retain / alloc メッセージのオブジェクト サークルの右側に保持カウントを配置することをお勧めします。

于 2012-05-13T17:21:16.170 に答える