我正在尝试使用以下循环来填充数组:
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的发布上
我在哪里走向错误的方向?
答案 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
。