保持されている引数は、NSInvocation の割り当てが解除されたときに解放されますか? それとも、NSInvocation の引数リスト内のオブジェクトに対して手動で解放する必要がありますか?
1692 次
2 に答える
5
「保持された引数」?引数は、NSInvocation によって自動的に保持されません。見る:
This class does not retain the arguments for the contained invocation by default. If those
objects might disappear between the time you create your instance of NSInvocation and the
time you use it, you should explicitly retain the objects yourself or invoke the
retainArguments method to have the invocation object retain them itself.
「retainArguments」を使用すると、手動で再度解放する必要はありません。NSInvocation は、それらを自動解放プールに追加することでそれを行います。参照: http://www.cocoabuilder.com/archive/cocoa/241994-surprise-nsinvocation-retainarguments-also-autoreleases-them.html
于 2011-06-23T05:59:58.513 に答える
2
Google 経由で、この会話を見つけました。これは、引数を解放する必要がない主な理由を説明しています。
そこで、-retainArguments を使用することにしました。これは、ターゲットと引数を使い終わったら、それらを解放することになっていると推測しました。
あなたが発見したように、いいえ、あなたはそれをするべきではありません。ターゲットと引数が保持されていません。NSInvocation にそうするように指示したので、それを解放する責任があります。
(その他のパターンや洞察については、 Memory Management Programming Guideを読むことをお勧めします。)
于 2011-06-23T05:59:12.387 に答える