2012-01-23 4 views
2

私がやってみたいのは、配列からすべてのオブジェクトを無視して別のオブジェクトセットを指すことです。次のようなものがあります。NSArrayでオブジェクトを無視する - メモリマネージャー

[myArrayFullOfObjects removeAllObjects]; 
myArrayFullOfObjects = nil; 
NSArray *newArray = [[NSArray alloc] initWithObjects:obj1, obj2, nil]; 
myArrayFullOfObjects = newArray; 

正しいですか?私は古いオブジェクト "myArrayFullOfObjects"が指していたメモリリークを避けたいと思います。あなたのコードで

+5

自動参照カウント(ARC)を使用しているかどうかによって異なります。そうでなければ、あなたは漏れている。 – bshirley

答えて

7

このライン:あなたは、もはやその配列へのポインタを持っていませんので

myArrayFullOfObjects = nil; 

は、メモリリークが発生しますので、それを解放することはありませんので、あなたはこれを行うことができ、次のいずれか

[myArrayFullOfObjects release]; 
myArrayFullOfObjects = nil; 

または

あなたはちょうどこのようなプロパティとしてごNEWARRAYを宣言することができます。

その後、.hファイル

@property(nonatomic, retain) NSArray *newArray; 

.mファイル

@synthesize newArray; 

と単純に実行します。

self.newArray = [NSArray arrayWithObjects:obj1, obj2, nil]; 

//Note that arrayWithObjects returns and autoreleased object, however the property setter will send it a retain message, so it will end up with a retain count of 1. 

bshirleyが言及として、あなたはARCを使用していない場合は、あなたがしている場合、これは、ありますARCを使用すると、これについて心配する必要はありません。

生成されたセッターは、メモリリークが発生しないように以前の値を解放します。

+0

答えをありがとう!単純に行を削除するとどうなりますか?myArrayFullOfObjects = nil?私がしたとき:myArrayFullOfObjects = newArray、myArrayFullOfObjectsが先に指していたメモリ領域がリークになりますか? –

関連する問題