NSMutalbeArray ADDOBJECT但覆盖以前的对象
问题描述:
当前数组类似于NSMutalbeArray ADDOBJECT但覆盖以前的对象
(a, b, c),
需要改变它们的顺序,如(B,C,A)和(C,A,B),然后将它们添加到一个新的阵列,最终目标是获得像
((a, b, c,), (b, c, a), (c, a, b))
代码数组如下:
NSMutableArray * now = [[NSMutableArray alloc] initWithObjects:@"a", @"b", @"c", nil];
NSMutableArray * new = [[NSMutableArray alloc] init];
[new addObject:now];
NSLog(@"...new0: %@", new);
int n, i;
for (n = 0; n < 2; n ++) {
for (i = 0; i < [now count] - 1; i ++) {
[now exchangeObjectAtIndex:i withObjectAtIndex:i+1];
}
[new addObject:now];
}
NSLog(@"...new1: %@", new);
BUT,最终的结果名new1是(C,A,b)OV改写了以前的!我的代码有什么问题?
...new1: (
(
c,
a,
b
),
(
c,
a,
b
),
(
c,
a,
b
)
)
答
的问题是,你使用相同的阵列现在进行更改。 这导致改变现在存储在新的以前的值。 这可以通过添加现在的副本来解决,如下所示
NSMutableArray * now = [[NSMutableArray alloc] initWithObjects:@"a", @"b", @"c", nil];
NSMutableArray * new = [[NSMutableArray alloc] init];
[new addObject:[now copy]];
NSLog(@"...new0: %@", new);
int n, i;
for (n = 0; n < 2; n ++) {
for (i = 0; i < [now count] - 1; i ++) {
[now exchangeObjectAtIndex:i withObjectAtIndex:i+1];
}
[new addObject:[now copy]];
}
NSLog(@"...new1: %@", new);
非常感谢! 一个家伙给了我一个小费,这个小费跟你的修改非常相似, ''[new addObject:[NSArray arrayWithArray:now]]; ' 这两者有什么区别? – S1U
两者都做同样的事情,而不是添加对正在添加的数组的引用,它添加了不包含引用的数组副本。 我想我的答案会更好,因为它可以让你了解发生了什么。顺便说一句,如果你发现答案有帮助,答案的勾号将不胜感激。 – ajithmn89