使用[self class]的重点是什么

| 此代码正确吗?
@implementation Vehicle
+(id) vehicleWithColor:(NSColor*)color {
    id newInstance = [[[self class] alloc] init]; // PERFECT, the class is // dynamically identified
    [newInstance setColor:color];
    return [newInstance autorelease];
}
@end
为什么要使用[自类] 我认为self已经指向静态方法的类(带有+的类)     
已邀请:
您说对了:在类方法中(在Objective-C中,它通常被称为而不是“ static \”方法,而在方法中更通常称为“ 1”)是不必要的,因为“ 2”已经是一个类,而“ 1”会返回自身。 但这变得更加有趣。在Objective-C中,类对象从技术上讲是元类的实例。因此,类方法中的“ 1”应返回元类而不是类本身。但是出于实际目的,Objective-C隐藏了元类,因此它专门处理这种情况。 关于此主题的一些不错的阅读: http://www.sealiesoftware.com/blog/archive/2009/04/14/objc_explain_Classes_and_metaclasses.html 继承图:http://www.sealiesoftware.com/blog/class%20diagram.pdf http://cocoawithlove.com/2010/01/what-is-meta-class-in-objective-c.html     
它支持子类化。如果您对类名进行了硬编码(如
[[Vehicle alloc] init]
中所示),那么Vehicle的子类将必须重写+ vehicleWithColor:使其正确执行操作。使用
[self class]
,您可以创建子类HarleyDavidson,而
[HarleyDavidson vehicleWithColor:[NSColor blackColor]]
将自动执行正确的操作,从而创建HarleyDavidson实例而不是Vehicle实例。 (编辑:) 有关类方法中的
self
[self class]
的信息,请参见下面的Joe \的注释-在类方法中,这没有什么区别。但是有可能的情况。类可以响应在根类中定义的实例方法-ѭ10本身就是这样的方法,在NSObject协议中定义为实例方法。因此,如果通过添加实例方法来扩展根类(例如,NSObject),则该方法在需要引用其自己的Class对象时应始终使用ѭ1。     

要回复问题请先登录注册