Цель-c: Как я могу получить экземпляр класса в методе класса - PullRequest
6 голосов
/ 26 июня 2010

У меня есть 2 класса, Parent и Child, и у Parent есть метод класса с именем func.Теперь я хочу получить экземпляр класса в методе func, чтобы определить, какой класс является вызывающим.

@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
}

Есть ли способ получить экземпляр класса (или имя класса) в методе класса?

Ответы [ 2 ]

16 голосов
/ 26 июня 2010

Если вы просто хотите войти / получить его как класс, вам просто нужно self. Это оно. Так как

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

или

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

также, если вы хотите получить имя в виде NSString, NSStringFromClass (self) покроет вас. (Как char *, class_getName (self) - это то, что вы ищете)

3 голосов
/ 26 июня 2010

Чтобы получить текущий объект класса, вы должны уметь:

[self class];

Поскольку self ссылается на экземпляр класса, потому что это метод класса. Класс - это метод, определенный в NSObject, который возвращает класс для объекта.

Отредактировано, чтобы избежать путаницы ...

...