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];