あるNSMutableArrayから別のNSMutableArrayへのオブジェクトのコピーを理解しようとしています。次の2つのシナリオを検討してください。1-クローンへのオリジナルのコピー。クローンの変更がオリジナルに影響します。2-クローズでの変更がオリジナルに影響を与えない場合に、オリジナルをクローンにコピーします。
まず、次のコードを使用して、最初にシナリオ#1を作成しようとしています。私が理解していることから、「mutablecopy」を使用せずに配列をコピーする場合、クローン配列は元の同じ文字列オブジェクトへのポインタを保持するだけです。では、クローンの最初の要素を別のオブジェクトに変更すると、元の要素の最初の要素が正しく変更されますか?...しかし、それは私が得ている結果ではありません。なんで?
実際のところ、mutablecopyを使用する場合
[self.cloneArray addObject:[[self.originalArray objectAtIndex:i] mutableCopy]];
同じ結果が得られます。私は混乱しています。
ArrayClass.h
@interface ArrayClass : NSObject {
NSMutableArray *_originalArray;
NSMutableArray *_cloneArray;
}
@property (nonatomic, retain) NSMutableArray *originalArray;
@property (nonatomic, retain) NSMutableArray *cloneArray;
ArrayClass.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