1

我正在尝试在 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];

虽然我有一种感觉,但这不是一件好事,我会开始到处泄漏内存。

4

1 回答 1

1

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

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

当您稍后发布您的mainArray引用时,它将负责释放它的所有子项,并且您sectionArray的 's 将被释放。(放入的 dicts 也是如此sectionArray)。

希望这有帮助。

于 2009-11-19T19:31:41.563 回答