在NSMutableDictionary中添加和修改NSMutableArray

时间:2012-07-23 07:15:12

标签: objective-c nsmutablearray nsmutabledictionary

我有一个函数,其中NSMutableDictionary由NSMutableArray的值填充。此NSMutableArray基于手指的移动存储CGPoints。当调用touchesEnded时,NSMutableArray中的值被“转移”到NSMutableDictionary中,然后它被清空。我这样做只是为了跟踪手指的移动(以及其他用途)。

这里的问题是当NSMutableArray被清空时,NSMutableDictionary也被清空。

这是我的代码:

[pointDict setObject:pointArr forKey:[NSNumber numberWithInt:i]];
//When I check if the pointDict is not empty, it works fine.
[pointArr removeAllObjects];
//Now when I check if the pointDict is not empty, it returns nothing.

谁能告诉我为什么会这样?代码有什么问题?

1 个答案:

答案 0 :(得分:2)

当您调用setObject:forKey:时,您只是传递指向pointArr所指向的同一对象的指针。所以当你告诉数组removeAllObjects时,所有的点都消失了,因为只有一个数组

您需要在存储之前制作副本。假设您正在使用ARC,并且在将数组放入pointDict之后无需修改数组,则可以执行此操作:

[pointDict setObject:[pointArr copy] forKey:[NSNumber numberWithInt:i]];

如果您需要保持数组的可变性,可以使用mutableCopy代替。

如果您没有使用ARC,则需要使用releaseautorelease在将复制的数组放入字典后对其进行声明(从copy开始创建一个新对象,就像alloc一样,你负责释放它。)