我有一个NSMutableArray (tripHistory),它每秒向它添加一个包含新数据的NSMutableDictionary (currentUpdate)。
[currentUpdate setObject:testVariable forKey:@"Test"];
[tripHistory addObject:currentUpdate];
[currentUpdate removeAllObjects];然而,当我在调用[[tripHistory objectAtIndex:i] description]的tripHistory中循环时,一切都是空的。
我的循环如下:
for (int i=0; i<[tripHistory count]; i++)
{
NSLog(@"%@", [[tripHistory objectAtIndex:i] description]);
}为了初始化我的变量,只在第一次更新时调用以下代码。
tripHistory = [[NSMutableArray alloc] init];
currentUpdate = [[NSMutableDictionary alloc] init];有什么想法吗?
发布于 2011-10-29 07:05:32
向NSArray添加对象并不会复制该对象。所发生的一切就是它的引用计数递增。因此,currentUpdate和添加到tripHistory中的NSDictionary是相同的。如果从currentUpdate中删除对象,也将从tripHistory中的NSDictionary中删除对象。
在将currentUpdate添加到tripHistory之后,您需要做的就是发布currentUpdate,并为下一次更新重新启动一个新的空NSDictionary。
发布于 2011-10-29 07:05:28
请勿删除对象。字典和数组保持对相同对象的引用。如果要向数组中添加另一个dict,请释放第一个dict并创建一个新的dict
发布于 2011-10-29 07:06:30
您正在删除字典中的所有内容。将字典添加到数组中并不会产生副本:数组将保留对字典的引用,每次向其添加内容时,都会清空该引用。
您应该每次通过循环分配一个新的字典,然后将该字典添加到数组中。如果您没有使用垃圾回收或ARC,则还应该在将字典添加到数组中之后释放它。
https://stackoverflow.com/questions/7935727
复制相似问题