objective framework iphone objective-c class hierarchy

framework - Diferencia SDK de iPhone entre isKindOfClass y isMemberOfClass



swift ios documentation (6)

isKindOfClass : devuelve un valor booleano que indica si el receptor es una instancia de una clase dada o una instancia de cualquier clase que hereda de esa clase.

isMemberOfClass : devuelve un valor booleano que indica si el receptor es una instancia de una clase determinada.

¿Puede alguien decirme cuál es la diferencia entre isKindOfClass:(Class)aClass y the isMemberOfClass:(Class)aClass functions? Sé que es algo pequeño como, uno es global, mientras que el otro es una coincidencia de clase exacta, pero necesito que alguien especifique cuál es cuál, por favor.


Debido a los clusters de clase, isMemberOfClass puede darle una respuesta que usted podría no esperar. En muchos casos, es más probable que su mejor opción sea - (BOOL) conformsToProtocol: (SEL) aSelector o - (BOOL) conformsToProtocol: (Protocol *) aProtocol. Es decir, es mejor probar estos si pueden responder a su necesidad en lugar de probar la clase / subclase.

Ver apple doc para clase y protocolo NSObject:

http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/cl/NSObject

http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intf/NSObject


Suponer

@interface A : NSObject @end @interface B : A @end ... id b = [[B alloc] init];

entonces

[b isKindOfClass:[A class]] == YES; [b isMemberOfClass:[A class]] == NO;

Básicamente, -isMemberOfClass: es verdadero si la instancia es exactamente de la clase especificada, mientras que -isKindOfClass: es verdadero si la instancia es exactamente de la clase especificada o si uno de los antecesores de la instancia es de la clase especificada.

-isMemberOfClass: rara vez se usa.


isKindOfClass-> devuelve SÍ cuando el objeto es instancia de esa clase o instancia de una clase que se hereda de él.

isMemberOfClass: devuelve SÍ cuando el objeto es instancia de esa clase pero No en el caso: instancia de una clase que se hereda de él.

el ejemplo es lo suficientemente bueno en la respuesta de jtbandes.


isKindOfClass: devuelve YES si el receptor es una instancia de la clase especificada o una instancia de cualquier clase que hereda de la clase especificada.

isMemberOfClass: devuelve SÍ si el receptor es una instancia de la clase especificada.

La mayoría de las veces que desea utilizar isKindOfClass: para asegurarse de que su código también funciona con subclases.

La Referencia del protocolo NSObject habla un poco más sobre estos métodos.


  • isKindOfClass: indica si un objeto hereda de una clase determinada
  • isMemberOfClass: indica si un objeto es una instancia de una clase determinada.

[[NSMutableData data] isKindOfClass:[NSData class]]; // YES [[NSMutableData data] isMemberOfClass:[NSData class]]; // NO