首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构建数组

构建数组
EN

Stack Overflow用户
提问于 2010-04-25 08:32:36
回答 3查看 848关注 0票数 2

我试图让下面的循环来填充数组:

代码语言:javascript
复制
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的发行版上。

当我使用

  • (如上面所示)时,数组不会重新初始化为一个新实例。在期望空值的同时,下一个对象被添加到旧的数组中。
  • 当我使用removeAllObjects时,我的数组是空的,附加到myArray.

的数组也是空的。

我往哪里走错方向了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-25 08:36:12

你可以把:

代码语言:javascript
复制
itemsArray = nil;

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

编辑

再看一遍,你有:

代码语言:javascript
复制
NSMutableArray *itemsArray = [[NSMutableArray alloc] init];

这是if语句中的作用域。

因此,取出NSMutableArray,只需使用:

代码语言:javascript
复制
itemsArray = [[NSMutableArray alloc] init];
票数 1
EN

Stack Overflow用户

发布于 2010-04-25 08:49:57

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

您也可能希望使用自动发布来简化。

票数 0
EN

Stack Overflow用户

发布于 2010-04-25 09:08:09

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2707629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档