Hay dos métodos que le interesan:
isKindOfClass:
pide al receptor si se trata de una clase o una subclase , donde como isMemberOfClass:
pide al receptor si se trata de la clase , pero no es una subclase. Por ejemplo, supongamos que tiene su subclase NSManagedObject
llamada objectClass.
if([self.objectClass isKindOfClass:[NSManagedObject class]]) {
// This will return YES
}
else if ([self.objectClass isMemberOfClass:[NSManagedObject class]]) {
// This will return NO
}
La primera instrucción devuelve Sí (o verdadero, o 1) porque objectClass es una subclase de NSManagedObject. La segunda declaración devuelve NO (o falso, o 0) porque, aunque es una subclase, no es la clase misma.
ACTUALIZACIÓN: me gustaría actualizar esta respuesta para llevar la luz a un comentario más abajo, que establece que esta explicación es incorrecta porque la siguiente línea de código:
if ([self.class isKindOfClass:self.class])
volvería falsa . Esto es correcto, devolvería falso. Pero este ejemplo es incorrecto Cada clase que hereda de NSObject también se ajusta al protocolo NSObject. Dentro de este protocolo hay un método llamado class
que "devuelve el objeto de clase para la clase del receptor". En este caso, self.class devuelve cualquier objeto de clase self. Sin embargo, a partir de la documentación sobre isKindOfClass:
-
devuelve un valor booleano que indica si el receptor es un instancia de la clase dada o una instancia de cualquier clase que hereda de esa clase.
por lo tanto, el envío de este mensaje a self.class (que es una clase) devuelve falso, ya que está destinado a ser enviado a una instancia de una clase, no a una clase en sí.
Si cambia el ejemplo a
if([self isKindOfClass:self.class])
Usted recibirá Sí (o verdadero, o 1).
Mi respuesta aquí supone que self.objectClass es un descriptor de acceso a una instancia llamada objectClass. Claro, es un nombre terrible para una instancia de una clase, pero la pregunta no era "¿cómo puedo nombrar instancias de clases?".
Quizás esté buscando el método '-isKindOfClass:': https://developer.apple.com/library/mac/# documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html –
Para mayor claridad en mi respuesta a continuación ... ¿qué es objectClass? ¿Es ese el nombre de una clase real? Una instancia de una clase? Por favor, no que la semántica sugiera que las clases se nombren con mayúscula primero y las instancias con minúscula. Entonces, MyClass es una clase, y instanceOfMyClass es una instancia de MyClass. – jmstone617
Clase _objectClass es un tipo de referencia de objeto de clase que RestKit está utilizando para instanciar sus instancias de objeto. –