0

ARCを使用しています。私が書いたゲームの最後に実行するメソッドがあり、メモリをクリアする必要があります。には一連のオブジェクトがありNSMutableArray、 を使用して削除しremoveObject:ます。次に、これらのオブジェクトを に設定しますnil。ただし、NSLogこれらのオブジェクトを使用すると、それらがまだ存在することが示されます。nilそれらをメモリから削除しないように設定するのはなぜですか?

4

1 に答える 1

1

ARC(自動参照カウント)では、オブジェクトへの参照を設定するnilことは、ゼロにする参照の種類に応じて2つの異なることを意味します。

  1. それがstrong参照である場合、それをゼロにすることは、参照されるオブジェクトの参照カウントを減らすことを意味します。

  2. 参照の場合weak、nil-ingは何もしません。

したがって、nil-ingは異なる結果につながる可能性があります。具体的には、オブジェクトの割り当てが解除されるのは、参照カウントがゼロになったときだけです。これは、システム内の他のオブジェクトが最初のオブジェクトを所有strongしていない場合(つまり、そのオブジェクトへの参照を保持している場合)に対応します。

strongしたがって、あなたの場合、あなたがしようとしているオブジェクトへの参照を保持している他のオブジェクトが存在する可能性がありますnil。または、弱参照をゼロにしている可能性があります。コードを表示すると、より明確になる場合があります。

于 2013-01-07T10:11:09.190 に答える