2013-01-09 3 views
2

다음과 같은 방법이 있습니다. NSObject에서Method 구조체에서 매개 변수의 클래스 형식을 가져 오는 방법이 있습니까?

- (void)method: (CustomClass)param; 

CustomClass 상속합니다.

아래에 변수 m이 있습니다. 해당 메서드의 구조체는 Method입니다. 이 같은 인수 유형을 얻을 수 method_getArgumentType()를 호출 :

char szArgType[100] = {0,}; 
Method m = ...; 
... 
method_getArgumentType(m, 2, szArgType, 100); 

나는 szArgType 인쇄. @을 인쇄했지만 CustomClass을 인쇄하고 싶습니다. 런타임에 Method에서 매개 변수에 대한 실제 객체 클래스 유형을 얻는 좋은 방법이 있습니까?

+0

참고 사항 : [ivar 클래스의 ObjC 클래스는 어떻게 구할 수 있습니까?] (http://stackoverflow.com/questions/11265503/) 어떻게해야할까요? C-class of an ivar/11266383 # 11266383) –

답변

7

이 작업을 수행 할 수 없습니다. 인터페이스 유형 (클래스)은 컴파일러에서만 사용되며 메서드 시그니처를 인코딩 할 때 해당 정보를 유지하지 않습니다.

런타임에 얻을 수있는 유일한 정보는 런타임 안내서의 Type Encodings chapter에 설명되어있는 것입니다. 매개 변수가 다양한 POD 유형 중 하나와 반대되는 객체인지 여부입니다. 개체의 인코딩은 클래스에 관계없이 동일하게 표시됩니다. 여기에 표시되는 @입니다. 컴파일러가 형식 검사를 끝내면 모든 것이 id입니다.

+0

고맙습니다. 당신의 대답이 나를 도왔습니다. method_getArgumentType 메소드를 통해 구조체 이름을 확인할 수 있도록 클래스 대신 구조체를 사용했습니다. – user1705636

+0

똑똑한 솔루션! 다행히 도울 수있어. –

관련 문제