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 に答える