7

親と子の 2 つのクラスがあり、親には func という名前のクラス メソッドがあります。今、どのクラスが呼び出し元であるかを区別するために、func メソッドで Class インスタンスを取得したいと考えています。

@interface Parent : NSObject
+ (void)func;
@end

@implementation Parent

+ (void)func {
    Class *class = howToGetClass();
    NSLog(@"%@ call func", class);
}

@end

@interface Child : Parent
@end

int main() {
    [Child func];    // call func from Child
}

クラスメソッドでクラスインスタンス(またはクラス名)を取得する方法はありますか?

4

2 に答える 2

17

ログに記録する/クラスとして取得するだけの場合は、が必要selfです。それでおしまい。以下のようなので

+ (void)func {
    Class class = self;
    NSLog(@"%@ call func", class);
}

また

+ (void)func {
    NSLog(@"%@ call func", self);
}

また、NSStringとして名前を取得したい場合は、NSStringFromClass(s​​elf)で対応できます。(char *として、class_getName(self)はあなたが探しているものです)

于 2010-06-26T18:34:35.997 に答える
3

現在のクラス オブジェクトを取得するには、次のようにする必要があります。

[self class];

as self はクラス メソッドであるため、クラス インスタンスを参照します。Class は NSObject で定義されたメソッドで、オブジェクトのクラスを返します。

混乱を避けるために編集...

于 2010-06-26T18:20:30.813 に答える