딥 복사를 허용하는 내장 기능이 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
.