답변:
NSString *name = NSStringFromClass ([NSArray class]);
다른 방법으로 되돌아 갈 수도 있습니다.
Class arrayClass = NSClassFromString (name);
id anInstance = [[arrayClass alloc] init];
[NSArray class]
는 실제로입니다 struct
. 이 struct
클래스에는 클래스의 이름, 구현하는 메소드, 수퍼 클래스 등 클래스에 대한 많은 정보가 포함되어 있습니다. 클래스 NSStringFromClass
이름을이 클래스에서 가져 와서 struct
로 변환하면됩니다 NSString
. 에 클래스 이름을 저장하지 마십시오 static NSString
. 성능상의 이점이 없습니다.
NSClassFromString
조금 다르게 작동합니다. 모든 클래스 이름은 Objective-C 런타임 어딘가에 존재 NSClassFromString
하므로 문자열을 가져와 주어진 이름을 가진 클래스를 찾기 위해 런타임에 의해 유지 보수되는 클래스 목록을 탐색합니다. 그것을 찾으면 그것을 반환하고, 그렇지 않으면를 반환합니다 Nil
.
class_getName()
C 문자열을 반환하는 런타임에서 사용 합니다
className
Mac OS X에서만 사용할 수있는 스크립팅 확장 프로그램에 의해 추가 된 방법으로, 완전히 문서화되지 않았기 때문에 (또는 적어도 마지막으로 확인한 시간이 아니기 때문에) 작동 방식이 까다 롭습니다. NSStringFromClass()
올바른 방법입니다.
타이핑을 약간 줄이면 다른 방법이 있습니다.
NSString *name = [NSArray description];
+description
하지만 이론 상으로는 이것이 목적 +description
이 아니므 로이 방법은 클래스 이름을 결정하는 데 취약합니다.
이 대안을 고려하십시오.
const char *name = class_getName(cls);
NSString 객체를 할당하고 ASCII를 NSString
표현으로 변환 할 필요가 없으므로 훨씬 빠릅니다 . 그것이 NSStringFromClass()
구현되는 방법 입니다.
NSStringFromClass
구현됩니까? 클래스 이름을static NSString
변수 에 저장하는 것이 더 성능이 좋습니까?