2010-06-18 46 views
4

我正在調試一個示例教程片段,並對setter的重寫感到困惑。覆蓋setter不被稱爲Objective-C

我宣佈和覆蓋此處,如圖所示:

// 
// 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];

我不明白。那麼壓倒一切的重點是什麼?

或者更可能,我做錯了什麼? ;)

回答

13

它的大寫錯誤,大小寫很重要。它應該是setNumberOfSides:

+0

+1方法名稱區分大小寫。 – 2010-06-18 20:39:19

+0

因此,即使我的變量是'numberOfSides'(小號'n'代表「號碼」),綜合功能*會根據自己的目的將其改爲大寫'N'。不錯。 :/ – 2010-06-18 20:43:04

+7

不,@synthesize會將案例更改爲與所有Cocoa中一致的駝峯框架規則完全一致。 'setnumberOfSides:'從來沒有意義。 – bbum 2010-06-18 23:48:25