我有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];
有什么想法吗?
答案 0 :(得分:4)
将对象添加到NSArray不会复制它。所有发生的事情是它的引用计数递增。因此currentUpdate
和添加到tripHistory
的NSDictionary是同一个。如果从currentUpdate
中删除对象,则还要从tripHistory
中的NSDictionary中删除对象。
将currentUpdate添加到tripHistory之后,您需要做的就是释放currentUpdate并使用新的空NSDictionary重新开始以进行下一次更新。
答案 1 :(得分:3)
不要删除对象。字典和数组保持对相同对象的引用。如果要将另一个dict添加到数组,则释放第一个dict并创建一个新的
答案 2 :(得分:2)
您正在删除字典中的所有内容。将字典添加到数组中不会复制:数组将保留对字典的引用,每次向其添加内容时都会清空该字典。
每次循环时都应该分配一个新的字典,然后在数组中添加该字典。如果您不使用垃圾收集或ARC,则还应在将字典添加到阵列后将其释放。