NSMutableArray * insideArray = [[NSMutableArray alloc] init]; NSMutableArray * outsideArray = [[NSMutableArray alloc] init]; [insideArray addObject:@“Hello 1”]; [insideArray addObject:@“Hello 2”]; [outsideArray addObject:insideArray]; [insideArray removeAllObjects]; [insideArray addObject:@“Hello 3”]; [insideArray addObject:@“Hello 4”]; [outsideArray addObject:insideArray]; 当前输出是
array(
(
"Hello 3",
"Hello 4"
),
(
"Hello 3",
"Hello 4"
)
)
我需要一种方法来获得输出
array(
(
"Hello 1",
"Hello 2"
),
(
"Hello 3",
"Hello 4"
)
)
有没有人有解决方案或者能看到我哪里出错了?感谢
答案 0 :(得分:3)
你实际上只是在这里创建两个数组。您正在创建“外部”数组,然后向相同的内部数组添加两个引用。当你输出它时,你会看到这两个内部数组引用完全相同的东西。
您需要在此处创建多个内部数组,因为您希望它们包含不同的值集。
这里的关键点是数组只是对象引用,清空和重新填充数组不会创建新数组;它只会改变你已经拥有的那个。
答案 1 :(得分:2)
您对两个子阵列使用相同的NSMutableArray。您需要使用两个不同的对象。具体而言,而不是
[insideArray removeAllObjects];
改为使用
[insideArray release];
insideArray = [NSMutableArray array];
获得最快的解决方案。
答案 2 :(得分:0)
我认为问题在于,当您将对象添加到数组中时,数组不会复制给定对象,它只保存对它的引用并将保留计数增加一个
答案 3 :(得分:0)
好吧,你要删除insideArray中的“Hello 1”和“Hello 2”,它是outsideArray持有的实际对象。换句话说,outsideArray不知道insideArray的内容。
答案 4 :(得分:0)
从内存管理的角度考虑它。每次键入“insideArray”时,计算机都会看到一个单点内存的引用。而“[outsideArray addObject:insideArray];”确实在outsideArray中对insideArray对象进行了引用,insideArray仍然指向内存中的同一个地方。
尝试实例化一个新对象并将其放在outsideArray中。更改: [outsideArray addObject:insideArray];
阅读: [outsideArray addObject:[NSMutableArray arrayWithArray:insideArray]];
这应该是最简单的解决方案。