0
data = [[NSMutableArray arrayWithCapacity:numISF]init];
count = 0;
while (count <= numISF)
{   
    [data addObject:[[rouge_col_data alloc]init]];
    count++;
}

当我逐步执行 while 循环时,数据数组中的每个对象都“超出范围”

rouge col data 的实现看起来像这样..

@implementation rouge_col_data
@synthesize pos;
@synthesize state;
-(id) init {
    self = [super init];    
    return self;
}
@end

我能找到的大多数教程只对这类数组中的对象使用 NSStrings。

-谢谢亚历克斯 E

编辑

data = [[[NSMutableArray alloc] initWithCapacity:numISF]retain];
//data = [[NSMutableArray arrayWithCapacity:numISF] retain];
count = 0;
while (count < numISF)
{

    [data addObject:[[[rouge_col_data alloc]init]autorelease]];

    count++;

}

即使切换'data =',仍然是同样的错误。

4

2 回答 2

3
  1. 您无需根据通话init结果进行arrayWithCapacity:通话。 arrayWithCapacity:已经为您返回了一个初始化(但自动释放)的对象。或者,您可以调用[[NSMutableArray alloc] initWithCapacity:].
  2. 您的循环有一个错误;您从零开始,因此您将添加一个额外的对象。添加这个额外的对象会成功 - 它看起来不像你想要做的。
  3. 您可能想要autorelease添加到数组中的对象。该数组将自行保留它们。如果您确实需要保留对象本身,那很好,但让数组为您保留是很常见的。
  4. 您应该retain数组本身,否则它将在事件循环结束时消失。
于 2009-11-10T17:38:46.200 回答
2

我可以在您的代码中发现的唯一错误是您的NSArray初始化。

你在哪里做:

data = [[NSMutableArray arrayWithCapacity:numISF] init];

你应该这样做:

data = [NSMutableArray arrayWithCapacity:numISF];

这是因为arrayWithCapacity它是一个工厂方法,并且会返回一个自动释放的实例。如果你想在这个方法之后继续使用这个对象,你需要retain它,你的可能看起来像:

data = [[NSMutableArray arrayWithCapacity:numISF] retain];
于 2009-11-10T17:38:16.710 回答