在Objective-C中没有调用覆盖的setter

时间:2010-06-18 20:24:24

标签: objective-c setter override

我正在调试一个示例教程片段,并对设置者的覆盖感到困惑。

我声明并覆盖如下所示:

//
//  PolygonShape.h
//

@interface PolygonShape : NSObject
{
    int numberOfSides;

}

@property int numberOfSides;


//
//  PolygonShape.m
//

@synthesize numberOfSides;
// custom setter.
- (void) setnumberOfSides:(int) i
{
    if ((i > minimumNumberOfSides) && (i <= maximumNumberOfSides))
        numberOfSides = i;
    else
        NSLog (@"Number of sides outside limits:\n You entered %d, limits are min.:%d, max.:%d", 
               i, minimumNumberOfSides+1, maximumNumberOfSides);
}


//
// main.m
//

poly = [[PolygonShape alloc] init];

poly.numberOfSides = 2;

[poly setnumberOfSides:2];

所以我的假设是,因为我“覆盖numberOfSides的合成设置器,然后poly.numberOfSides = 2;将调用我的(void) setnumberOfSides:(int) i函数。但相反,调用函数的唯一方法是我明确地执行[poly setnumberOfSides:2];

我不明白。那么压倒什么呢?

或者更可能的是,我做错了什么? ;)

1 个答案:

答案 0 :(得分:13)

资本化不正确,资本化很重要。它应该是setNumberOfSides: