0

如何从静态方法中检测调用类,以便如果该类是子类,则检测到子类?(见 MakeInstance 内的评论)

@interface Widget : NSObject
+ (id) MakeInstance;
@end

@implementation Widget
+ (id) MakeInstance{
    Class klass = //How do I get this?
    id instance = [[klass alloc] init];
    return instance;
}
@end

@interface UberWidget : Widget
//stuff
@end

@implementation UberWidget
//Stuff that does not involve re-defining MakeInstance
@end

//Somewhere in the program
UberWidget* my_widget = [UberWidget MakeInstance];
4

2 回答 2

3

我相信您要完成的适当解决方案是:

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

正如 Cyrille 指出的那样,[instance autorelease]如果您想遵循约定(并且不使用 ARC),它可能应该返回。

于 2012-06-01T13:59:19.173 回答
2

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

于 2012-06-01T14:01:45.777 回答