Есть ли встроенная функция, которая позволяет мне глубоко копировать 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
, то он не может быть скопирован - поэтому вам никогда не следует пытаться сделать его копию, потому что это не та возможность, для которой он был разработан. С точки зрения реализации Какао, некопируемые объекты часто имеют какое-то внутреннее состояние C, к которому они привязаны, поэтому взлом прямой копии объекта может привести к состоянию гонки или хуже. Итак, чтобы ответить «что поместить в« глубокую копию »» - оставлено исх. Единственное, что можно положить куда угодно, когда у вас есть не NSCopying
объект.