Iphone Objective-C-如何在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]; 电流输出为Iphone Objective-C-如何在2d NSMutableArray中添加对象,iphone,objective-c,arrays,2d,nsmutablearray,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
array(
(
"Hello 3",
"Hello 4"
),
(
"Hello 3",
"Hello 4"
)
)
我需要一种方法来获得输出
array(
(
"Hello 1",
"Hello 2"
),
(
"Hello 3",
"Hello 4"
)
)
有没有人能找到解决办法,或者能看出我哪里出了问题?谢谢我认为问题在于,当您将一个对象添加到数组中时,数组不会复制给定对象,它只保留对它的引用,并将保留计数增加一个我认为问题在于,当您将一个对象添加到数组中时,数组不会复制给定对象,它只是保存对它的引用,并将保留计数增加一个好吧,您正在从insideArray中删除Hello 1和Hello 2,这是outsideArray所保存的实际对象。换句话说,outsideArray不知道insideArray的内容 好吧,您正在从insideArray中删除Hello 1和Hello 2,这是outsideArray持有的实际对象。换句话说,outsideArray不知道insideArray的内容 两个子数组使用相同的NSMutableArray。您需要使用两个不同的对象。具体地说,而不是
[insideArray removeAllObjects];
改用
[insideArray release];
insideArray = [NSMutableArray array];
最快的解决方案。两个子阵列使用相同的NSMutableArray。您需要使用两个不同的对象。具体地说,而不是
[insideArray removeAllObjects];
改用
[insideArray release];
insideArray = [NSMutableArray array];
这是最快的解决方案。这里实际上只创建了两个数组。您正在创建外部数组,然后向同一内部数组添加两个引用。当您输出它时,您会看到这两个内部数组引用完全相同的内容
您需要在这里创建多个内部数组,因为您希望它们包含不同的值集
这里的关键点是数组只是对象引用,清空和重新填充数组不会创建新的数组;它只是改变了你已经拥有的一个数组。你实际上只在这里创建了两个数组。您正在创建外部数组,然后向其添加对同一内部数组的两个引用。当您输出它时,您会看到这两个内部数组引用完全相同的内容
您需要在这里创建多个内部数组,因为您希望它们包含不同的值集
这里的关键点是数组只是对象引用,清空和重新填充数组不会创建新的数组;它只会改变你已经拥有的内存。从内存管理的角度考虑它。每次输入InsiderRay时,计算机都会看到一个引用,即一个内存点。而[outsideArray addObject:insideArray];如果在outsideArray中放置对insideArray对象的引用,insideArray仍然指向内存中的同一位置 尝试实例化一个新对象并将其放置在outsideArray中。更改: [outsideArray addObject:insideArray] 全文如下: [outsideArray addObject:[NSMutableArray arrayWithArray:insideArray]]
这应该是最简单的解决方案。从内存管理的角度考虑。每次输入InsiderRay时,计算机都会看到一个引用,即一个内存点。而[outsideArray addObject:insideArray];如果在outsideArray中放置对insideArray对象的引用,insideArray仍然指向内存中的同一位置 尝试实例化一个新对象并将其放置在outsideArray中。更改: [outsideArray addObject:insideArray] 全文如下: [outsideArray addObject:[NSMutableArray arrayWithArray:insideArray]] 这应该是最简单的解决办法