Objective c 如何在objective c静态方法中检测调用类

Objective c 如何在objective c静态方法中检测调用类,objective-c,class,inheritance,factory-method,Objective C,Class,Inheritance,Factory Method,如何从静态方法中检测调用类,从而在类被子类化时检测子类?(请参见MakeInstance中的注释) 我认为,对于您正在努力实现的目标,适当的解决方案是: + (id) MakeInstance{ id instance = [[self alloc] init]; return instance; } 正如Cyrille所指出的,如果您想遵循惯例(并且不使用ARC),它可能会返回[实例自动释放]。我认为您尝试实现的适当解决方案是: + (id) MakeInstance{

如何从静态方法中检测调用类,从而在类被子类化时检测子类?(请参见MakeInstance中的注释)


我认为,对于您正在努力实现的目标,适当的解决方案是:

+ (id) MakeInstance{
    id instance = [[self alloc] init];
    return instance;
}

正如Cyrille所指出的,如果您想遵循惯例(并且不使用ARC),它可能会返回
[实例自动释放]

我认为您尝试实现的适当解决方案是:

+ (id) MakeInstance{
    id instance = [[self alloc] init];
    return instance;
}

正如Cyrille指出的,如果您想遵循约定(并且不使用ARC),它可能会返回
[实例自动释放]

UIAdam的解决方案非常适合您的情况。尽管更具体地说,如果您想检测从哪个类调用方法,请在对象上使用
[self class]
,或者对类使用
self

[self class],或者简单地对类使用
self

这应该可以做到,假设您在初始值设定项中添加了一个
autorelease
,假设您在初始值设定项中添加了一个
autorelease
。Objective-C中没有静态方法。相反,有类方法,如您在示例中所示。请注意,方法名称应该以小写字母开头,例如, MaultAudio>代码>而不是<代码> Mauffic实例< /C>。注意这是Objtovi-C和Java和C++之间的重要区别之一——在爪哇和C++中,这是不可能的。this@jlehr谢谢你提供的额外信息**在我工作的地方,大写方法名是工厂方法的样式约定。我将向他们转达你的关切;)如果你的目标是苹果的平台,你最好遵循他们的指导方针。不遵循现行惯例的项目团队并没有建立新的惯例——他们只是在破坏已经存在的惯例。这样做什么也做不到。Objective-C中没有静态方法。相反,有类方法,如您在示例中所示。请注意,方法名称应该以小写字母开头,例如, MaultAudio>代码>而不是<代码> Mauffic实例< /C>。注意这是Objtovi-C和Java和C++之间的重要区别之一——在爪哇和C++中,这是不可能的。this@jlehr谢谢你提供的额外信息**在我工作的地方,大写方法名是工厂方法的样式约定。我将向他们转达你的关切;)如果你的目标是苹果的平台,你最好遵循他们的指导方针。不遵循现行惯例的项目团队并没有建立新的惯例——他们只是在破坏已经存在的惯例。那样做什么也做不成。