В книге «Программирование в Objective C2» (Стивен Кочан) был следующий массив:
NSMutableArray *arr1 = [NSMutableArray arrayWithObjects:
@"one, @"two", @"three", nil];
и другой массив, объявленный следующим образом:
NSMutableArray *arr2;
и мелкая изменяемая копияпроисходит следующим образом:
arr2 = [arr1 mutableCopy];
в соответствии с учебником, arr2
теперь содержит новый массив, но со ссылками на объекты arr1
объекты не являются реальными копиями для объектов в массиве.
В книге сказано, чтобы изменить первый элемент arr2, не затрагивая первый элемент arr1, напишите следующие строки:
NSMutableString *mStr = [NSMutableString stringWithString:[arr2 objectAtIndex:0]];
[mStr appendString: @"ONE"];
[arr2 replaceObjectAtIndex: 0 withObject: mStr];
Кто-нибудь может объяснить, почему первый элемент arr2 затронул только первый элемент arr1, но не первыйтоже?