2

コレクションが「解放される」と、そのオブジェクトもすべて解放されることを読んでいます。一方で、コレクションの割り当てが解除されるとすぐにコレクションがオブジェクトを解放することも読んでいました。

しかし、アップルが言うように、最後のことが常に起こるとは限りません。システムは、割り当てを解除するかどうかを決定します。ほとんどの場合はそうですが、そうでない場合もあります。

コレクションがこのようなメモリリークを引き起こす可能性があるのでしょうか? そして、コレクション自体への解放メッセージですべてのオブジェクトを解放する場合、コレクション自体を保持するとすぐに、コレクション内のすべてのオブジェクトを実際に保持する必要があります。

それについて明確なイメージを得るのを手伝ってください。ありがとう!

4

2 に答える 2

8

オブジェクトをコレクションに追加すると、オブジェクトが削除されるか、コレクションの割り当てが解除されるまで、コレクションによって保持されます。コレクションに送信された後続の保持または解放メッセージは、コレクション内のオブジェクトの保持カウントを変更しません。

言い換えれば、保持を数えるのではなく、所有権の観点から考えてください。

于 2009-04-27T17:56:02.417 に答える
4

オブジェクトにリリースを送信すると、その保持カウントが削除されます。保持カウントがゼロになると、破棄されます。コンテナーが破棄される (解放されない) 場合、そのオブジェクトは解放されます (ただし、保持カウントが他の理由でゼロ以外の場合、破棄されません)。

簡単な答え: これはすべて期待どおりに機能します。問題は、「解放された」が「破棄された」という意味で表示されていることです。彼らは違います。

于 2009-04-27T17:58:36.810 に答える