4

または同様のものを探しているときに、このコードサンプルNSStackに出くわしました。このメソッドでは、作成者はオブジェクトを明示的に保持してから返します。これは本当に必要ですか?ランタイムは、実行ループの反復の最後に(途中ではなく)、コンテンツから削除されたオブジェクトを破棄するという印象を受けています。popreturnObjectautoreleaseremoveLastObject

4

1 に答える 1

6

これは本当に必要ですか?

まだ手動のメモリ管理を使用している場合です。その保持がないとreturnObject、アレイから削除するとすぐに割り当てが解除される可能性があります。可変配列は、それに含まれるオブジェクトを保持し、削除時にそれらを解放します。オブジェクトを削除する前に保持すると、オブジェクトの割り当てが解除されなくなります。自動リリースを使用すると、呼び出し元のメソッドがオブジェクトを受信するのに十分な時間、オブジェクトを固定できます。

ARCを使用している場合(そして使用しない理由は多くありません)、そのことについて心配する必要はありません。コンパイラーは、いつ保持し、いつリリースするかを判断します。

ランタイムは、実行ループの反復の最後に、removeLastObjectを介してコンテンツから削除されたオブジェクトを破棄するという印象を受けています。

これは、NSMutableArrayがオブジェクトを削除したときにオブジェクトを自動解放した場合に発生することですが、そうなると考える理由はありません。削除されたオブジェクトが返された場合、削除されたオブジェクトが自動解放されることを期待できます-removeLastObjectが、そうではありません。他のオブジェクトが所有するオブジェクトで何をするかについて、決して仮定してはいけません。

于 2012-10-18T02:05:32.040 に答える