Answers:
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
变量中性能更高吗?