2010-06-18 2 views
4

예제 튜토리얼 스 니펫을 디버깅하고 설정자 재정의에 대해 혼란스러워합니다.Objective-C에서 setter를 호출하지 않도록 재정의

I 선언하고 여기에 표시된 재정의 그래서 내 가정

// 
// 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 메서드 이름은 대소 문자를 구분합니다. –

+0

내 변수가 'numberOfSides'인데도 ("숫자"가 작은 'n') 합성 기능 *이 자체 목적으로 자본 'N'으로 변경됩니다. 좋은. :/ –

+7

아니요, @synthesize는 모든 코코아에서 일관된 낙타 껍질 규칙과 정확하게 일치하도록 사례를 변경합니다. 'setnumberOfSides :'는 결코 의미가 없습니다. – bbum

관련 문제