构建一个数组数组

时间:2010-04-25 08:32:36

标签: iphone objective-c xcode

我正在尝试使用以下循环来填充数组:

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的发布上

  • 当我使用release(如上所述)时,数组不会重新初始化为具有alloc的新实例。在期待空虚的同时,下一个对象被添加到旧数组中。
  • 当我使用removeAllObjects时,我的数组被清空,附加到myArray的数组也被清空。

我在哪里走向错误的方向?

3 个答案:

答案 0 :(得分:1)

你可以放置:

itemsArray = nil;

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

修改

再看一遍,你有:

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

这是在if声明中的范围。

所以取出NSMutableArray并使用:

itemsArray = [[NSMutableArray alloc] init];

答案 1 :(得分:0)

不要写NSMutableArray *itemsArray = [[NSMutableArray alloc] init]; - 您在if语句的范围内重新声明变量,因此在if语句之外,itemsArray将仍然引用旧值(我不确定编译器为什么不抱怨)。您可以改为itemsArray = [[NSMutableArray alloc] init]

您也可能想要使用自动释放,以简化。

答案 2 :(得分:0)

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

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