0

我有一个函数,其中 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.

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

4

1 回答 1

2

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

您需要在存储之前制作副本。假设您使用的是 ARC,并且在将数组放入 后不需要修改数组pointDict,您可以这样做:

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

如果您需要保持数组可变,则可以mutableCopy改用。

如果您不使用 ARC,则需要在将复制的数组放入字典后使用release或释放​​您对复制数组的声明(因为创建了一个新对象,就像您负责释放它一样)。autoreleasecopyalloc

于 2012-07-23T07:21:05.247 回答