NSMutableArray超出范围问题

时间:2010-10-29 12:17:02

标签: objective-c c nsmutablearray

我是Objective-C的新手。我想使用NSMutableArray来存储我稍后将访问的一些对象。

我有界面:

@interface ControlWheel : RotatableObject <LeverSubject>
{
 NSMutableArray *subjectArray_;
}
-(id) initWithCWDef: (ControlWheelDef*) def;
-(void) addSubject: (id) subject;
@end

以下是实施:

-(id) initWithCWDef:(ControlWheelDef *)def
{
    ...
    self = [super initWithDef:&rDef];
    if (self)
    {
        subjectArray_ = [NSMutableArray arrayWithCapacity:1];
    }
    return self;
}

-(void) addSubject:(id)subject
{
    [subjectArray_ addObject:subject];
}

-(void) angleChangeCallback
{
    unsigned int count = [subjectArray_ count];
    for (unsigned int i = 0; i < count; i++)
    {
        [[subjectArray_ objectAtIndex:i] onAngleChanged:angle_];
    }
}

问题出在angleChangeCallback函数中。 subjectArray_超出范围。 我做错了什么?

2 个答案:

答案 0 :(得分:4)

arrayWithCapacity:返回一个自动释放的数组。你想要[[NSMutableArray alloc] init];

NSMutableArray会根据需要增长,因此arrayWithCapacity:在大多数情况下并不是特别有用,除非您要用已知的大量对象填充它。

哦,它并没有超出范围;它已被自动释放池收集。

答案 1 :(得分:0)

看起来你的界面顶部没有定义angleChangeCallback。我看到addSubject和initWithCWDef但不是他。