私にはさまざまなNSArrays
があり、ユーザーの選択に応じて、そのうちの 1 つを新しい にコピーしたいと考えていますNSArray
。相互にコピーするにはどうすればよいNSArray
ですか?
3 に答える
これにはいくつかの方法があります-
array1 = [array2 copy];
initWithArray
メソッドを使用します。メソッドを使用することもできます
initWithArray:copyItems:
。(これはNSMutableArray
)
を使用できます
NSArray *_newArray = [NSArray arrayWithArray:_oldArray];
または、より良い場合は、次を使用できます。
NSArray *_newArray = [[NSArray alloc] initWithArray:_oldArray];
(その場合、最初の配列のオブジェクトはコピーされず、2 番目の保持のみを取得しNSArray
ます。任意の配列からオブジェクトを削除しても、他の配列には影響しませんが、任意のオブジェクトを変更すると、古い配列と新しい配列の両方がオブジェクトの同じインスタンスで動作しているため、他の配列でも変更されます。)
新しい配列に古いオブジェクトの別のインスタンスを作成する計画がある場合:
NSArray *_newArray = [[NSArray alloc] initWithArray:_oldArray copyItems:true];
ARC を使用している場合は、他に何もする必要はありません。使用していない場合は、両方を使用する-initWithArray:
か、不要になった後に を使用してアレイを解放する必要があります。-initWithArray:copyItems:
[_newArray release];
としても
NSArray *newArray = [oldArray copy];
新しい配列に追加/削除する必要がある場合、変更可能なコピーを作成する最も簡単な方法は次のとおりです。
NSMutableArray *editableArray = [oldArray mutableCopy];
上記の関数は両方とも浅いコピーを作成します。深いコピーの場合は、@holex と @rishi が言及したとおりです。
NSArray *newArray = [[NSArray alloc] initWithArray:oldArray copyItems:true];
NSMutableArray *editableArray = [[NSMutableArray alloc] initWithArray:oldArray copyItems:true];