我试图了解将对象从一个 NSMutableArray 复制到另一个。考虑以下 2 种情况: 1 - 将原件复制到克隆中,其中克隆中的更改将影响原件。2 - 将原件复制到克隆,其中关闭的更改不会影响原件。
首先,我尝试使用以下代码首先生成场景#1。据我了解,当不使用“mutablecopy”复制数组时,克隆数组只会保存指向原始字符串对象的指针。因此,如果我要将克隆的第一个元素更改为不同的对象,那么原始的第一个元素会更改太多,对吗?...但这不是我得到的结果。为什么?
事实上,当我使用 mutablecopy
[self.cloneArray addObject:[[self.originalArray objectAtIndex:i] mutableCopy]];
我得到相同的结果。我很困惑。
数组类.h
@interface ArrayClass : NSObject {
NSMutableArray *_originalArray;
NSMutableArray *_cloneArray;
}
@property (nonatomic, retain) NSMutableArray *originalArray;
@property (nonatomic, retain) NSMutableArray *cloneArray;
数组类.m
@synthesize originalArray = _originalArray;
@synthesize cloneArray = _cloneArray;
_originalArray = [[NSMutableArray alloc] initWithObjects: @"one", @"two", @"three", @"four", @"five", nil];
_cloneArray = [[NSMutableArray alloc] initWithCapacity:[self.originalArray count]];
for (int i=0; i<5; i++) {
[self.cloneArray addObject:[self.originalArray objectAtIndex:i]];
}
// make change to the first element of the clone array
[self.cloneArray replaceObjectAtIndex:0 withObject:@"blah"];
for (int n=0; n<5; n++) {
NSLog(@"Original:%@ --- Clone:%@", [self.originalArray objectAtIndex:n], [self.cloneArray objectAtIndex:n]);
}
...
2011-03-27 03:23:16.637 StringTest[1751:207] Original:one --- Clone:blah
2011-03-27 03:23:16.638 StringTest[1751:207] Original:two --- Clone:two
2011-03-27 03:23:16.639 StringTest[1751:207] Original:three --- Clone:three
2011-03-27 03:23:16.642 StringTest[1751:207] Original:four --- Clone:four
2011-03-27 03:23:16.643 StringTest[1751:207] Original:five --- Clone:five