繁体   English   中英

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

[英]Objective-C - How to add objects in 2d NSMutableArrays

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

有没有人有解决方案,或者可以看到我哪里出问题了? 谢谢

您实际上只是在这里创建两个数组。 您要创建“外部”数组,然后将两个引用添加到同一内部数组。 输出时,您会看到这两个内部数组引用的是完全相同的东西。

您需要在此处创建多个内部数组,因为您希望它们保存不同的值集。

这里的关键点是数组只是对象引用,清空和重新填充数组不会创建一个新的数组。 它只会更改您已经拥有的一个。

您正在为两个子数组使用相同的NSMutableArray。 您需要使用两个不同的对象。 具体来说,代替

[insideArray removeAllObjects];

代替使用

[insideArray release];
insideArray = [NSMutableArray array];

寻求最快的解决方案。

我认为问题在于,当您将一个对象添加到数组中时,该数组不会复制给定的对象,它仅保留对其的引用,并将保留计数增加一

好吧,您要从insideArray删除“ Hello 1”和“ Hello 2”,这是outsideArray持有的实际对象。 换句话说,outsideArray不了解insideArray的内容。

从内存管理的角度考虑它。 每次键入“ insideArray”时,计算机都会看到一个引用,指向单个内存点。 而“ [outsideArray addObject:insideArray];” 确实在outsideArray中放置了对insideArray对象的引用,insideArray仍指向内存中的同一位置。

尝试实例化一个新对象,并将其放置在outsideArray中。 更改:[outsideArray addObject:insideArray];

读取:[outsideArray addObject:[NSMutableArray arrayWithArray:insideArray]];

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM