2010-06-26 13 views
6

Tengo 2 clases, principal y secundaria, y el padre tiene un método de clase llamado func. Ahora quiero obtener la instancia de clase en el método func para distinguir qué clase es la que llama.Objective-c: cómo puedo obtener la instancia de clase en el método de clase

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

¿Hay alguna forma de obtener la instancia de clase (o nombre de clase) en el método de clase?

Respuesta

16

Si lo que desea es registrarlo/conseguirlo como una clase, sólo tendrá self. Eso es. Así como

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

o

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

también, si se desea obtener el nombre que un NSString, NSStringFromClass (auto) tiene cubierto. (Como un char *, class_getName (self) es lo que está buscando)

+0

Estoy tratando de agregar algunos métodos de utilidad (como all() en django) a NSManagedObject. Entonces necesito distinguir a la persona que llama. ¡Usar 'yo' es lo que quería saber! ¡Gracias! – taichino

+0

No fui yo quien votó, sino que lo comprobé, y en un método de clase self == [self class] Acabo de ver esto en otro comentario, pero para aclarar, son IDENTICOS, en un método de clase al menos. Así que usted tenía razón, y yo también estaba –

+1

Clase * class = self; Está Mal. Retirar *. La sintaxis correcta es: Class class = self; – Lukasz

3

para obtener el objeto clase actual, debe ser capaz de hacer:

[self class]; 

Como auto hará referencia a la instancia de clase, porque es un método de clase. La clase es un método definido en NSObject, que devuelve la clase para el objeto.

Editado para evitar confusiones ...

+0

Para aclarar, esto devuelve el objeto 'Class' de su clase, no solo el * nombre * como lo implica la respuesta. –

+3

en realidad, [self class] es lo mismo que self en un método de clase. Los documentos (bien, los documentos GNUStep) dicen que se implementa solo con 'return self'. Solo existe para pasar clases como argumentos, ver http://stackoverflow.com/questions/3107213/why-do-we-have-to-do-myclass-class-in-objective-c –

+1

¡Muchas gracias! ¡No sabía que 'yo' puede usarse en el método de clase! – taichino

Cuestiones relacionadas