web-dev-qa-db-ja.com

NSMutableArrayをコピーする方法

NSMutableArrayをコピーして配列を変更しても参照が変更されないようにする方法を知りたいだけです。配列をコピーするにはどうすればよいですか?

20
Blane Townsend

これを行うには複数の方法があります。

NSArray *newArray = [NSMutableArray arrayWithArray:oldArray];

NSArray *newArray = [[[NSMutableArray alloc] initWithArray:oldArray] autorelease];

NSArray *newArray = [[oldArray mutableCopy] autorelease];

ただし、これらはすべて浅いコピーを作成します。

編集: ARCを使用している場合は、autoreleaseへの呼び出しを削除するだけです。)

ディープコピーの場合は、代わりにこれを使用します。

NSMutableArray *newArray = [[[NSMutableArray alloc] initWithArray:oldArray copyItems:YES] autorelease];

注目に値する:明らかな理由で、後者ではすべての配列の要素オブジェクトにNSCopyingを実装する必要があります。

47
Regexident