Objective-C - 如何在2d NSMutableArrays中添加对象

时间:2010-03-18 02:06:18

标签: iphone objective-c arrays 2d nsmutablearray

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"
       )
      )

有没有人有解决方案或者能看到我哪里出错了?感谢

5 个答案:

答案 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]];

这应该是最简单的解决方案。

相关问题