【问题标题】:Building an array of arrays构建数组数组
【发布时间】:2010-04-25 08:32:36
【问题描述】:

我正在尝试让以下循环工作以填充数组数组:

while (condition) {
[itemsArray fillFromDB];

if (! [checkArray containsObject:checkFlag]) {
  // Add existing itemsArray to myArray
  if (itemsArray.count) {
    // add the itemsArray to myArray and create a new instance of itemsArray
    [myArray addObject:itemsArray];
    [itemsArray release];
    NSMutableArray *itemsArray = [[NSMutableArray alloc] init];
  }
  [itemsArray addObject:myObject];
  [checkArray addObject:checkFlag];
} else {
  [itemsArray addObject:tmpEvent];
}  }

但是我试图塑造这个循环,它落在 itemsArray 的释放上

  • 当我使用释放(如上)时,数组不会重新初始化为使用 alloc 的新实例。虽然预期为空,但下一个对象被添加到旧数组中。
  • 当我使用 removeAllObjects 时,我的 Array 被清空,附加到 myArray 的数组也是如此。

我在哪里走错了方向?

【问题讨论】:

  • 只是出于好奇,您会接受任何答案吗?
  • 当然,我没有按照你说的那样回复你吗?好的,刚看到你在说什么,让我点击勾号...

标签: iphone objective-c xcode


【解决方案1】:

你可以放置:

itemsArray = nil;

release 消息之后,确保您没有指向旧实例。

编辑

再看一遍,你有:

NSMutableArray *itemsArray = [[NSMutableArray alloc] init];

这在if 语句的范围内。

所以取出NSMutableArray 并使用:

itemsArray = [[NSMutableArray alloc] init];

【讨论】:

  • 嗨,Alex,试过了,但导致“[NSCFArray count]: method sent to an uninitialized mutable array object'”错误...
【解决方案2】:

不要写NSMutableArray *itemsArray = [[NSMutableArray alloc] init];——你是在if语句的范围内重新声明变量,所以在if语句之外,itemsArray仍然会引用旧值(我'不确定为什么编译器不抱怨)。你可以直接说itemsArray = [[NSMutableArray alloc] init]

您可能还想使用自动释放来简化。

【讨论】:

    【解决方案3】:

    其他人发现了问题,但又制造了一个新问题。第一次创建可变数组时,需要使用NSMutableArray *itemsArray = [[NSMutableArray alloc] init];。然后,之后,您可以release 并使用itemsArray = [[NSMutableArray alloc] init];。重要的是第一个(创建指针的那个)只出现一次,其余的可以根据需要出现多次。

    编辑: 您可以在if 语句之前写NSMutableArray *itemsArray;,然后在if 语句中使用itemsArray = [[NSMutableArray alloc] init];

    【讨论】:

    • 嗨 jrtc27,这就是我现在的样子,只是在上面的代码示例中不可见,非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    相关资源
    最近更新 更多