2009-12-08 4 views
2

저는 iPhone 개발을 배우고 있습니다. 책 예제에는 @synthesize 키워드가 속성에 대해 언급되어 있습니다.iPhone Dev - @synthesize 키워드?

컨트롤의 경우 .h 파일에서 속성을 정의하지만 .m 파일에서는 @synthesize가 아닙니다. .text 특성을 가진 텍스트 상자의 속성에 액세스하고 있습니다. 또한 텍스트 상자의 아웃렛을 연결하고 텍스트 상자의 이름이 속성 이름과 다릅니다.

코드가 정상적으로 실행됩니다. 그래서 @synthesize 키워드는 필요하지 않습니까? 그리고 언제?

애플의 문서> 맥 개발자 센터> 코코아 핵심 역량> 선언 호텔에서

답변

4

:

접근을 방법을 선언뿐만 아니라, 당신이 그들을 의 구현을 합성하는 컴파일러 지시 (또는 알릴 수 컴파일러가 런타임에 클래스에서 합성합니다.

당신은 당신이 속성 선언에 을 준 스펙과 일치하는 구현 을 만들 컴파일러를 알려줄 수있는 클래스의 구현 블록에서 @synthesize 문을 사용합니다.

당신은 그것이 @property 선언으로 지정된 접근 방법의 구현을 찾을 수 경우 경고를 억제하는 컴파일러에게하는 @dynamic 문을 사용 참조

.

+0

괜찮지 만 그 중 하나도 수행하지 않은 것으로 보입니다. –

+0

@paul simmons 그런 다음 속성에 의해 선언 된 (가능한 경우) 메서드가 m 파일에 구현되거나 컴파일러에서 경고합니다 – justin

+0

아, 그냥 경고입니까? 오류가 아닌가? –

3

@synthesize 지시문은 접근 자 메서드 생성을 제어합니다. 그러나 엄격하게 말하면 접근 자 메서드를 사용하지 않아도되므로 컴파일러에서 자동으로 생성하도록하는 것이 좋습니다.

접근 자 메서드를 사용하면 변수를 미세하게 조정할 수 있으므로 키 - 값 코딩이 쉬워집니다.

Objective-c 2.0 이전에는 수동으로 접근자를 작성해야했습니다. 그것은 모든 변수에 대해 두 가지 방법을 쓰는 것을 의미했습니다. 지루하고 많은 사람들이 스크립트를 사용하여 작업을 수행했습니다. 그들이 언어를 업데이트했을 때, 그들은 그 스크립트들을 포함 시켰습니다. @property, @synthesize 및 @dynamic 컴파일러 지시문은 해당 스크립트를 활성화합니다.

관련 문제