Чи є якась вбудована функція, яка дозволяє мені глибоко копіювати 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
, він не підлягає копіюванню - тому ніколи не слід намагатися зробити його копію, оскільки це не є можливостями, які вона була спроектована. Що стосується реалізації какао, об'єкти, що не копіюються, часто мають певний стан резервного копіювання, до якого вони прив’язані, тому злом прямої копії об'єкта може призвести до перегонів або гірших умов. Отже, щоб відповісти "що потрібно помістити в" глибоку копію "" - Залишається реф. Єдине, що можна поставити куди завгодно, коли у вас немає NSCopying
об'єкта.