を深くコピーできる組み込み関数はありますNSMutableArray
か?
周りを見回してみると、[aMutableArray copyWithZone:nil]
作品はディープコピーとして機能すると言う人もいます。試してみたところ、浅いコピーのようです。
現在、私はfor
ループでコピーを手動で行っています:
//deep copy a 9*9 mutable array to a passed-in reference array
-deepMuCopy : (NSMutableArray*) array
toNewArray : (NSMutableArray*) arrayNew {
[arrayNew removeAllObjects];//ensure it's clean
for (int y = 0; y<9; y++) {
[arrayNew addObject:[NSMutableArray new]];
for (int x = 0; x<9; x++) {
[[arrayNew objectAtIndex:y] addObject:[NSMutableArray new]];
NSMutableArray *aDomain = [[array objectAtIndex:y] objectAtIndex:x];
for (int i = 0; i<[aDomain count]; i++) {
//copy object by object
NSNumber* n = [NSNumber numberWithInt:[[aDomain objectAtIndex:i] intValue]];
[[[arrayNew objectAtIndex:y] objectAtIndex:x] addObject:n];
}
}
}
}
しかし、私はよりクリーンで簡潔なソリューションを求めています。
-copy
のMac OS X 10.4と10.5の間で変更さ不変コレクション上:developer.apple.com/library/mac/releasenotes/Cocoa/...(「不変コレクションとコピー行動」までスクロール)
copy
「ディープコピー」には何を配置する必要がありますか?要素が別のコレクションである場合、copy
実際には(同じクラスの)コピーは生成されません。したがって、特定のケースで必要なコピーのタイプについて議論することは完全に有効だと思います。
NSCopying
/を実装しない場合、-copy
それはコピー可能ではありません。そのため、そのコピーを作成しようとしないでください。これは、それが持つように設計された機能ではないためです。Cocoaの実装に関して、コピー不可能なオブジェクトは、関連付けられているCバックエンドの状態を持っていることが多いため、オブジェクトの直接コピーをハッキングすると、競合状態が発生したり、悪化したりする可能性があります。したがって、「「ディープコピー」に何を入れるか」と答えるには、保持された参照。非NSCopying
オブジェクトがあるときにどこにでも置くことができる唯一のもの。