は私が持っていると言うが必要です。後では、メモリ管理の明確化WRTにNSArray
、私は
にしたいとき、私は行うことはできません。
array = [newStuff allKeys];
それだけでポインタを再割り当てし、元の配列を孤立になるため。私はまずオブジェクトを削除する必要があります
[array removeAllObjects];
私の理解が正しいかどうか知りたいですか?ありがとう!
は私が持っていると言うが必要です。後では、メモリ管理の明確化WRTにNSArray
、私は
にしたいとき、私は行うことはできません。
array = [newStuff allKeys];
それだけでポインタを再割り当てし、元の配列を孤立になるため。私はまずオブジェクトを削除する必要があります
[array removeAllObjects];
私の理解が正しいかどうか知りたいですか?ありがとう!
NSArray *array = [stuff allKeys];
これはあなたが所有していない配列を提供します。それが技術的にコピーかどうかはあなたの問題ではありません。アクセサーは "alloc"または "new"という単語で始まらないか、または "copy"という単語を含むので、戻り値を所有していないので、解放する必要はありません。 (あなたはそれを維持したい場合しかし、あなたはそれを保持する必要があります。)
を後でこれを行う場合:大丈夫です
array = [newStuff allKeys];
を。それはあなたが知っているように、元の参照で暴走するが、その参照をとにかく所有していないので、それを放置しても問題ない。この新しい参考資料は、あなたがそれを保持しない限り、もちろんあなたのものではありません。
番号allKeys
は、オートレリースされたNSArray
を返します。明示的にretain
を指定しない限り、後でリリースされます。したがって、array = [newStuff allKeys];
の設定は問題ありません。おそらくthis guide on Objective-Cとお読みください。
一般に、メソッド名にalloc、copyまたはnewが含まれていない場合は、メソッド名を解放する必要はありません。 – LandonSchropp
@helixedほとんど。正しいバージョンは次のようになります: "一般に、メソッド名が' alloc'または 'new'で始まらないか、' copy'を含んでいれば、それを解放する必要はありません。 " –
@Dave:追加された精度で編集されます。どうも。 –