2011-01-20 4 views
1

더 이상 시간을 보내기 전에 이것에 대한 명확한 답을 얻고 싶습니다. Objective-C 속성 합성을 단순화하기 위해 전 처리기 매크로 작성에 익숙하지 않습니다. 필자가 보았던 한 가지 아이디어는 #define SYNTHESIZE(_X_) @synthesize _X_ = _##_X_과 같은 것으로, 비슷한 이름의 인스턴스 변수에 밑줄 접두사가 붙은 속성을 바인딩합니다.@synthesize [속성 이름] 구문에 대한 질문

이 질문에 계속 노력하면서, 제 질문은 속성 이름으로 @synthesize를 호출 할 수 있습니까?하지만이 속성 이름을 간접적으로 가져올 수 있습니까? 예를 들어 클래스를 통해 모든 속성의 이름을 찾기 위해 클래스 내부 검사를 수행하는 경우 이러한 속성 중 하나를 @synthesize로 전달할 수 있습니까? 그렇지 않으면 실제 이름 자체 여야합니까? 그것이 어떤 용도의 것이라면, 나는 LLVM 2.0으로 컴파일하고있다.

답변

2

아니요, 런타임에 합성 할 수 없습니다. 그게 당신이 요구하는 것입니다 - 속성을 내삽하고 getters/setter를 생성하는 런타임 코드. 그러나 @synthesize는 컴파일 타임 기능이므로 작업 할 때 컴파일 타임에 코드에 있어야합니다.

+0

속성 인트로 페션의 결과에 따라 class_addMethod를 사용하여 런타임에 getter 및 setters를 추가 할 수 있습니까? 내가 이해하는 바에 따르면, 참조 할 수 있도록 IMP를 미리 정의해야하기 때문에 이것이 불가능할 수도 있습니다. –

+0

확실히 가능하지만 SEL을 기반으로 수행 할 작업을 파악하기에 충분히 유연한 IMP로 작동하는 C 함수를 작성해야합니다. 또한 생성 된 메소드보다 속도가 느리고 원자 속성에 문제가있을 수 있습니다. 노력하지 않는 것이 좋습니다. –