use*_*951 15 xcode class objective-c self
这段代码是否正确
@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
Run Code Online (Sandbox Code Playgroud)
为何使用[自习班]
我认为自己已经指向静态方法的类(带+的那些)
She*_*ley 19
这是为了支持子类化.如果您对类名进行了硬编码[[Vehicle alloc] init],那么Vehicle的子类必须覆盖+ vehicleWithColor:以使其做正确的事情.有了[self class],您可以创建一个子类HarleyDavidson,并[HarleyDavidson vehicleWithColor:[NSColor blackColor]]自动执行正确的操作,创建HarleyDavidson实例而不是Vehicle实例.
(编辑 :)
见下面关于乔的评论self与[self class]类方法-类方法,它不会有所作为.但是,是的情况下就可以了.类可以响应在根类中定义的实例方法 - -class本身就是这样一种方法,定义为NSObject协议中的实例方法.因此,如果通过添加实例方法扩展(例如)NSObject等根类,则该方法应始终使用,[self class]如果它需要引用自己的Class对象.
Dan*_*son 18
你是对的:[self class]在类方法中是不必要的(它通常在Objective-C而不是"静态"方法中称为),因为self它已经是一个类,并[self class]返回它自己.
但它变得更有趣.在Objective-C中,类对象在技术上是元类的实例.所以[self class]在类方法中应该返回元类而不是类本身.但是出于实际目的,Objective-C隐藏了元类,因此它特别处理了这种情况.
关于这个主题的一些好的阅读: