字典数组,空字典,保持数组数据

时间:2011-10-28 23:00:16

标签: iphone objective-c arrays

我有NSMutableArray(tripHistory),每秒都会使用新数据添加NSMutableDictionary(currentUpdate)。

[currentUpdate setObject:testVariable forKey:@"Test"];
[tripHistory addObject:currentUpdate];
[currentUpdate removeAllObjects];

然而,当我循环tripHistory调用[[tripHistory objectAtIndex:i] description]时,一切都为空。

我的循环如下:

for (int i=0; i<[tripHistory count]; i++)
{
    NSLog(@"%@", [[tripHistory objectAtIndex:i] description]);
}

要初始化我的变量,只为第一次更新调用以下代码。

tripHistory = [[NSMutableArray alloc] init];
currentUpdate = [[NSMutableDictionary alloc] init];

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

将对象添加到NSArray不会复制它。所有发生的事情是它的引用计数递增。因此currentUpdate和添加到tripHistory的NSDictionary是同一个。如果从currentUpdate中删除对象,则还要从tripHistory中的NSDictionary中删除对象。

将currentUpdate添加到tripHistory之后,您需要做的就是释放currentUpdate并使用新的空NSDictionary重新开始以进行下一次更新。

答案 1 :(得分:3)

不要删除对象。字典和数组保持对相同对象的引用。如果要将另一个dict添加到数组,则释放第一个dict并创建一个新的

答案 2 :(得分:2)

您正在删除字典中的所有内容。将字典添加到数组中不会复制:数组将保留对字典的引用,每次向其添加内容时都会清空该字典。

每次循环时都应该分配一个新的字典,然后在数组中添加该字典。如果您不使用垃圾收集或ARC,则还应在将字典添加到阵列后将其释放。