【问题标题】:Creating an Array of Arrays in XCode在 XCode 中创建一个数组
【发布时间】:2011-05-19 11:33:36
【问题描述】:

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

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

【问题讨论】:

  • 当你在一个数组中添加对象时,我认为数组会保留这个对象......所以你认为这不会发生的假设是错误的
  • 代码示例?你要求的是可能的,所以你可能有一个错误。
  • 会的。您需要释放/自动释放它。或者使用 NSMutableArray +array 方法。
  • 没关系 - 只要确保先释放旧数组,例如[sectionArray release] 在上面两行之前。当您调用 addObject 时,底层对象的保留计数将增加,因此释放 sectionArray 不会释放实际数组。然后,当您释放指针数组时,它将释放这些指针引用的所有数组。
  • 非常感谢各位。问这样的基础知识真的很尴尬,这真的很有帮助。

标签: objective-c pointers nsmutablearray nsdictionary


【解决方案1】:

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

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

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 2017-10-30
    • 2019-07-18
    • 2022-10-06
    相关资源
    最近更新 更多