2011-10-28 77 views
1

我有一個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]; 

任何想法?

回答

4

將對象添加到NSArray不會複製它。發生的所有事情是它的引用計數遞增。因此currentUpdate和添加到tripHistory的NSDictionary是一樣的。如果您從currentUpdate中刪除對象,則還會從tripHistory的NSDictionary中刪除對象。

將currentUpdate添加到tripHistory之後,您只需要釋放currentUpdate,然後再次啓動一個新的空NSDictionary以進行下一次更新。

+0

如何在啓用ARC的情況下強制釋放它? – Baub

+0

明白了!我只是currentUpdate = [[NSMutableDictionary alloc] init];每次更新。 – Baub

+1

你不知道。當你開始下一次更新時,只需重新分配一個新的字典:'currentUpdate = [NSMutableDictionary alloc] init];' –

3

不要移除物體。字典和數組保持對同一對象的引用。如果你想添加另一個字典到數組,然後釋放第一個字典並創建一個新的字典

2

您正在刪除字典中的所有內容。將字典添加到數組中不會生成副本:數組將保留對字典的引用,每次向其中添加內容時都會將其清空。

您應該每次在循環中分配一個新字典,然後將該字典添加到數組中。如果您不使用垃圾收集或ARC,則應在將字典添加到數組後將其釋放。

+0

這工作,你也解決了我的ARC關注。真棒。謝謝! – Baub