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