2012-01-11 3 views
4

나는 (Nerd Ranch) 픽업 한 책에서 OOP를 배웠고 막 getter and setter 장을 읽었습니다. 나는 내가 방금 한 일을 이해하고 있음을 분명히 밝히고 싶다. 인스턴스의 값을 설정하는 메서드를 만든 다음 값을 추출하고 표시하는 다른 메서드를 만드는 대신에 @property@synthesize 구문을 사용하여 두 메서드를 모두 정의합니다.Getter and Setter Explained?

-(void) setHeightOfObject:(int)h; 
-(void) setWeightOfObject:(float)w; 
-(int) heightOfObject; 
-(float) weightOfObject; 

이처럼 정의 :

대신이 일을

@property int heightOfObject; 
@property float weightOfObject; 

:

- (int)heightOfObject 
{ 
    return heightOfObject; 
} 

- (void)setHeightOfObject:(int)h 
{ 
    heightInMeters = h; 
} 

- (float)weightOfObject 
{ 
    return weightOfObject; 
} 

- (void)setWeightOfObject:(float)w 
{ 
    weightOfObject = w; 
} 

은 내가 .H 파일에 getter와 setter를 사용하여이 작업을 수행 할 것 그런 다음 내 .m 파일로 이동하여 연결하십시오.

@synthesize heightInMeters, weightOfObject; 

그러면 내 개체의 값을 설정하고 인쇄해야하는 경우 가져 오는 기능을 제공합니까? 나는 이것이 중요한 개념이라는 것을 알고 있으며, 나는 그것을 올바르게 파악하고 싶다.

답변

3

정확합니다. 은 컴파일하는 동안 작성한 구현으로 확장됩니다.

이 간단한 지름길을 가지고 getters와 setters를 작성하는 것은 지루하고 반복적이어서 (대부분의 객체는 getter와 setter를 원하는 속성 집합을 가지고 있기 때문에) boilerplate code 시간을 절약하고 흥미로운 것을 구현하는 데 더 많은 시간을 소비하게됩니다.

objective-c의 속성에 대한 자세한 내용은 programming guide에서 확인할 수 있습니다 (이 부분에서는 다소 불분명 함).

+0

굉장, 나중에 내 프로그래밍 여행에서 링크를 확인해 보겠습니다. – David

0

getter 및 setter를 만드는 간단한 방법을 제공하기 위해 Objective C 2.0에서 속성 및 합성이 도입되었습니다. 그것이 도움이 될 것입니다

확인이 링크 :

http://cocoacast.com/?q=node/103

0

에만 getter 및 setter를 얻을 수 없습니다. 또한 깔끔한 구문을 얻을 수 있습니다 : self.heightOfObject 당신이 할당하거나 읽을 수 있습니다. @property에는 설정이 너무 많아서 자세히 읽을 수 있습니다. 특히 읽기 및 쓰기 액세스가 필요한지 아니면 둘 중 하나만 액세스해야하는지 여부를 제어 할 수 있습니다.

1

@property와 @synthesize를 사용하면 두 가지 부분을 달성 할 수 있습니다.

@property는 도트 구문을 사용하여 heightOfObject 및 weightOfObject의 접근자를 호출 할 수 있도록 컴파일러에 알립니다. 그래서이

int height = myObject.heightOfObject; 
myObject.weightOfObject = 10; 

을하는 것은 법적 코드가되어이 정확히 동일하다 :

int height = [myObject heightOfObject]; 
[myObject setWeightOfObject:10]; 

당신은 당신이했던 것처럼이 경우 당신은 정확하게 접근을 구현해야 @synthesize없이 @property 사용할 수 있습니다 너의 질문.

@synthesize를 사용하면 컴파일러에서 접근자를 생성해야하며 런타임에서 지원하는 경우 인스턴스 변수 (예 : iOS 및 64 비트 OS X)도 생성됩니다.

+0

고마워요, 제가 알고 싶었던 것입니다. – David