首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字典数组、空字典、保留数组数据

问字典数组、空字典、保留数组数据
EN

Stack Overflow用户
提问于 2011-10-29 07:00:16
回答 3查看 223关注 0票数 1

我有一个NSMutableArray (tripHistory),它每秒向它添加一个包含新数据的NSMutableDictionary (currentUpdate)。

代码语言:javascript
复制
[currentUpdate setObject:testVariable forKey:@"Test"];
[tripHistory addObject:currentUpdate];
[currentUpdate removeAllObjects];

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

我的循环如下:

代码语言:javascript
复制
for (int i=0; i<[tripHistory count]; i++)
{
    NSLog(@"%@", [[tripHistory objectAtIndex:i] description]);
}

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

代码语言:javascript
复制
tripHistory = [[NSMutableArray alloc] init];
currentUpdate = [[NSMutableDictionary alloc] init];

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-29 07:05:32

向NSArray添加对象并不会复制该对象。所发生的一切就是它的引用计数递增。因此,currentUpdate和添加到tripHistory中的NSDictionary是相同的。如果从currentUpdate中删除对象,也将从tripHistory中的NSDictionary中删除对象。

在将currentUpdate添加到tripHistory之后,您需要做的就是发布currentUpdate,并为下一次更新重新启动一个新的空NSDictionary。

票数 4
EN

Stack Overflow用户

发布于 2011-10-29 07:05:28

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

票数 3
EN

Stack Overflow用户

发布于 2011-10-29 07:06:30

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7935727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档