data = [[NSMutableArray arrayWithCapacity:numISF]init];
count = 0;
while (count <= numISF)
{
[data addObject:[[rouge_col_data alloc]init]];
count++;
}
当我逐步执行while循环时,数据数组中的每个对象都是“超出范围”
rouge col数据的实现看起来像这样..
@implementation rouge_col_data
@synthesize pos;
@synthesize state;
-(id) init {
self = [super init];
return self;
}
@end
我能找到的大多数教程只对这些类型的数组中的对象使用NSStrings。
-Thanks Alex 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 ='。
答案 0 :(得分:3)
init
电话的结果致电arrayWithCapacity:
。 arrayWithCapacity:
已经返回一个初始化(但自动释放)的对象。或者,您可以拨打[[NSMutableArray alloc] initWithCapacity:]
。autorelease
您要添加到阵列的对象。该阵列将保留它们自己。如果你确实需要保留对象本身,那很好,但让阵列为你做保留是很常见的。retain
数组本身,否则它会在事件循环结束时消失。答案 1 :(得分:2)
我在代码中发现的唯一错误是NSArray
初始化。
你在哪里:
data = [[NSMutableArray arrayWithCapacity:numISF] init];
你应该这样做:
data = [NSMutableArray arrayWithCapacity:numISF];
这是因为arrayWithCapacity
是一个工厂方法,它会返回一个自动释放的实例。如果你想在这个方法之后继续使用这个对象,你需要retain
它,你的看起来会像:
data = [[NSMutableArray arrayWithCapacity:numISF] retain];