4

どうやらmutableCopyは値ではなく、参照によってコピーします。つまり、私がこれを行う場合:

NSMutableArray arrayA = [arrayB mutableCopy];

次に、arrayBの値を変更すると、arrayAの値も変更されます。

Javaには値でコピーするclone()メソッドがあると思います。ObjectiveCに同等のものはありますか?

4

3 に答える 3

6

このmutableCopyメソッドは「浅い」コピーを実行します。の各要素arrayAは、にもあるオブジェクトへの参照arrayBです。要素を追加arrayA(または削除)arrayBすると、変更されません。その逆も同様です。ただし、との要素は同じオブジェクトarrayAarrayB参照しているため、これらのオブジェクトの1つへの変更は、両方の配列に「表示」されます。

の1レベルのディープコピーが必要な場合は、次のarrayBように実行できます。

NSMutableArray *arrayA = [[NSMutableArray alloc] initWithArray:arrayB copyItems:YES];

これには次の効果があります。

NSMutableArray *arrayA = [[NSMutableArray alloc] init];
for (id element in arrayB) {
    [arrayA addObject:[element copy]]; //copies immutable objects to new array  
}
于 2012-06-29T23:30:15.840 に答える
0

配列をディープコピーするには、以下を使用する必要があります。

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

これcopyWithZone:により、配列内の各オブジェクトに対してが実行されます

于 2012-06-29T23:38:05.393 に答える
-1

通常の[NSMutableArray copy]メソッドは、Appleのドキュメントに従って、「コピーが作成されたときの元のオブジェクトと同じ値を持つ機能的に独立したオブジェクト」を返します。おそらくそれを使用する必要があります。

変更可能であることを完全に確認するには、を使用します[[NSMutableArray alloc] initWithArray:[otherArray copy]]

于 2012-06-29T23:29:15.177 に答える