Iphone 字典数组,空字典,保留数组数据

Iphone 字典数组,空字典,保留数组数据,iphone,objective-c,arrays,Iphone,Objective C,Arrays,我有一个NSMutableArray(tripHistory),它每秒都会向其中添加一个NSMutableDictionary(currentUpdate)和新数据 [currentUpdate setObject:testVariable forKey:@"Test"]; [tripHistory addObject:currentUpdate]; [currentUpdate removeAllObjects]; 然而,当我在tripHistory中循环调用[[tripHistory ob

我有一个
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]);
}

有什么想法吗

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

将对象添加到NSArray不会复制它。所发生的只是它的引用计数增加。因此,
currentUpdate
和添加到
tripHistory
中的NSDictionary是同一个。如果您从
currentUpdate
中删除对象,那么您也将从
tripHistory
中的NSDictionary中删除对象


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

将对象添加到NSArray不会复制它。所发生的只是它的引用计数增加。因此,
currentUpdate
和添加到
tripHistory
中的NSDictionary是同一个。如果您从
currentUpdate
中删除对象,那么您也将从
tripHistory
中的NSDictionary中删除对象


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

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


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

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


您应该在循环中每次分配一个新字典,然后将该字典添加到数组中。如果您没有使用垃圾收集或ARC,您也应该在字典添加到数组后释放它。

启用ARC后,我如何强制释放它?明白了!我只是currentUpdate=[[NSMutableDictionary alloc]init];每次它更新时,你不需要。只需在启动下一次更新时为其重新分配一个新字典:
currentUpdate=[NSMutableDictionary alloc]init]是的,没错!你打败了我。我怎么能在启用ARC的情况下强制释放它?明白了!我只是currentUpdate=[[NSMutableDictionary alloc]init];每次它更新时,你不需要。只需在启动下一次更新时为其重新分配一个新字典:
currentUpdate=[NSMutableDictionary alloc]init]是的,没错!你打败了我。这很有效,你也解决了我的ARC问题。令人惊叹的。非常感谢。这起作用了,你也解决了我的ARC问题。令人惊叹的。非常感谢。
tripHistory = [[NSMutableArray alloc] init];
currentUpdate = [[NSMutableDictionary alloc] init];