在XCode中创建一个数组数组

时间:2009-11-19 18:57:49

标签: objective-c pointers nsmutablearray nsdictionary

我正在尝试构建一个包含Xcode中字典对象数组的数组。我可以创建一个包含一个或多个字典的工作数组,然后使用addObject:方法将此数组添加为主数组中的对象。我循环这几次,重建工作数组并将对象添加到主数组。到目前为止一切都很好,除了在检查我的主数组时它包含工作数组构建的最后一个字典的副本。我假设这是因为当我使用addObject时,它只是指定一个指向数组的指针,但不会增加保留计数或创建工作数组的副本,因此每次重建时主数组只指向此数组

我想我的问题是如何创建工作数组的副本将其添加到主数组然后重新构建并重新添加?如果这似乎是一个基本问题,那么这是有道理和抱歉的 - 它是(我是Xcode的新手) - 任何帮助都会非常感激。


        [sectionArray release];
        sectionArray  = [[NSMutableArray alloc] init];
        [sectionArray addObject:dict];

这一切都有效,这很棒。有一点我不知道的是,是否存在这样的危险:当我完成主数组并且我也执行[mainArray发布]这些子数组将被留在内存中或者释放会破坏他们也是?


我通过重新初始化内部工作数组而不是仅删除所有对象来解决它,即

我确实有:

        [sectionArray removeAllObjects];
        [sectionArray addObject:dict];

并将其更改为:

        sectionArray  = [[NSMutableArray alloc] init];
        [sectionArray addObject:dict];

我有一种感觉,虽然这不是一件好事,我会开始在整个地方泄漏记忆。

1 个答案:

答案 0 :(得分:1)

如果您使用sectionArray所做的只是将其放入另一个数组中,则需要在将其放入mainArray之后将其释放,以便只有mainArray包含对它的引用:

sectionArray = [[NSMutableArray alloc] init];
[sectionArray addObject:dict];
[mainArray addObject:sectionArray];
[sectionArray release];

当您稍后发布mainArray引用时,它将负责释放所有孩子,并且您的sectionArray将被释放。 (同样适用于sectionArray)中的词汇。

希望这会有所帮助。