2009-07-04 5 views
2

Java의 Class.forName 메서드가 작동하는 방식과 비슷한 클래스 이름에서 개체를 동적으로 인스턴스화하기 위해 무언가를 만들려고합니다.클래스 로딩시 Objective-C의 정적 초기화 도구

Class klass = Class.forName("MyClass"); 
Object obj = klass.instantiate(... 

그래서 내가 목표 - C 클래스가로드 될 때 클래스를 등록하는 방법을 호출하고자하는 목표 - C에서 그러한 행동을 보지 않았다. 기본적으로 클래스를 등록하는 메소드를 호출하고 싶습니다.

+ (void)mystatic { 
    [NSKeyedUnarchiver setClass:[self class] forClassName:"MyClass"] 
} 

OS X 플랫폼의 Objective-C에서이를 수행 할 수있는 방법이 있습니까?

감사합니다.

답변

4

는이 같은 NSClassFromString를 사용하려면 :

Class klass = NSClassFromString(@"MyClass"); 
id obj = [[klass alloc] init]; 
+1

"Class *"대신 "Class"가됩니다. – newacct

+0

피곤한 동안 webform에 코드를 작성하면 안됩니다 ;-) 고마워, 고쳐졌습니다. –

3

첫째, 실제로 목표 - C에서와 같은 동등한 존재 - @Louis가 제안,() NSClassFromString를 사용합니다.

둘째, 자바와 같은 정적 생성자를 원할 경우 + initialize 메소드로도이를 수행 할 수 있습니다. this related SO question을 참조하십시오.

0

또한 런타임이 아직 클래스 건너 않았을 수 있습니다 때 자주 경우에 도움이

Class myClass = [[NSBundle mainBundle] classNamed: @"MyClassName]; 
id myInstance = [[myClass alloc] init]; 

을 말할 수있다.