2009-10-08 3 views
1

Objective-C의 속성과 관련하여 매우 기본적인 질문이 있습니다.Objective-C 101 : 도트 표기법 및 개체 속성

내가 @synthesizemyProp 인 경우에만 도트 표기법 (Obj.MyProp)을 통해 객체의 속성에 액세스 할 수 있습니다. 그 맞습니까?

나 자신의 setter 메서드를 사용하면 도트 표기법에서 속성을 더 이상 참조 할 수 없다고 말하는 것이 사실입니까?

기본적으로 나는 사용자 정의 getter/setter를 작성할 수 있고 속성이 설정 될 때 실행해야하는 추가 코드를 제공하는 C# 유형의 기능을 찾고 있습니다.

답변

6

@property는 정의를 직접 제공하는 경우 즉

(int)thing { 
    return thing; 
} 
(void)setThing:(int)value { 
    thing = value; 
} 

, 그것은 @synthesized 버전을 우선 단지 구현을 자동으로 생성

(int)thing; 
(void)setThing:(int)value; 

@synthesize를 작성처럼, 자동 메시지 선언을 만듭니다. 따라서 메소드의 이름을 올바르게 지정하면 거기에서 @synthesize를 사용하거나 사용하지 않고 작동 할 것입니다.

점 표기법은 합성 또는 사용자 정의 방법 구현과 함께 작동합니다.

+0

여기서주의해야 할 점은 setThing이라는 실제 이름이 중요하다는 것입니다. 세터의 이름이 다른 경우 @property 선언의 setter 속성으로 세터를 재정의 할 수 있습니다. – nall

3

정확하지 않습니다. getter 및 setter가 해당 속성에 대해 올바른 메서드 이름을 유지하는 과정에서 제공하는 사용자 정의 getter 또는 setter를 작성하더라도 도트 표기법을 사용할 수 있습니다. docs에서

0

:

@synthesize

당신은 그것을 세터를 합성 및/또는 당신이하지 않으면 재산에 대한 방법을 터링해야 컴파일러에게하는 @synthesize 키워드를 사용 은 @implementation 블록 내에 입력하십시오.

아직 작성하지 않은 경우에만 합성됩니다. 글을 쓰면 합성되지 않습니다.

+0

getter 및 setter가 getter 및 setter에 대해 KVC를 준수하는 한 점 표기가 작동해야합니다. – pxl

+0

@synthesize와 무슨 상관이 있습니까? –