¿Puede alguien decirme cuál es la diferencia entre las funciones isKindOfClass:(Class)aClass
y isMemberOfClass:(Class)aClass
? 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.diferencia de iPhone SDK entre isKindOfClass y isMemberOfClass
Respuesta
isKindOfClass:
devuelve SÍ 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 parte del tiempo desea utilizar isKindOfClass:
para asegurarse de que su código también funciona con subclases.
El NSObject Protocol Reference habla un poco más sobre estos métodos.
Supongamos
@interface A : NSObject
@end
@interface B : A
@end
...
id b = [[B alloc] init];
continuación
[b isKindOfClass:[A class]] == YES;
[b isMemberOfClass:[A class]] == NO;
Básicamente, -isMemberOfClass:
es cierto si la instancia es exactamente de la clase especificada, mientras que -isKindOfClass:
es cierto si la instancia es exactamente de la clase especificada o si uno de los antepasados de la instancia es de la clase especificada.
-isMemberOfClass:
casi nunca se utiliza.
Pero si tiene una matriz de subvistas que incluyen UIViews y un UISegmentedControl y las enlazó y estableció un condicional en la clase, necesitaría usar isMemberOfClas UIView y isMemberOfClass UISegmentedControl para distinguir entre ellas, ¿no? isKindOfClass vería UISegmentedControl como UIView. – PruitIgoe
@Pruitlgoe eso es muy cierto. Puedes usar isKindOfClass: [UIView class] para asegurarte de que todos los objetos con los que tratas son UIView pero necesitarías usar isMemberOfClass: [UIView class] y/o isMemberOfClass: [UISegmentedControl class] dentro de alguna instrucción condicional para indicar cualquier implementación distinta de las vistas basadas en su clase de instancia inmediata –
isKindOfClass:
indica si un objeto hereda de una clase dadaisMemberOfClass:
indica si un objeto es una instancia de una clase dada.
[[NSMutableData data] isKindOfClass:[NSData class]]; // YES
[[NSMutableData data] isMemberOfClass:[NSData class]]; // NO
@Durga, si esto responde su pregunta, debe aceptarlo. Lea más acerca de cómo aceptar la tasa aquí: http://meta.stackexchange.com/questions/16721/how-does-accept-rate-work – poncha
isKindOfClass: devuelve un valor booleano que indica si el receptor es una instancia de clase dada o una instancia de cualquier clase que hereda de la clase.
isMemberOfClass: devuelve un valor booleano que indica si el receptor es una instancia de una clase determinada.
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 ella.
ejemplo es suficiente en la respuesta jtbandes.
Debido a los clusters de clase, isMemberOfClass puede darle una respuesta que 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 clase/subclase.
véase el documento de manzana para la clase NSObject y protocolo:
- 1. iPhone SDK: ¿cuál es la diferencia entre #import y @class?
- 2. Xcode iPhone - Base SDK, diferencia Active SDK?
- 3. Objetivo c isKindOfClass mal entendido?
- 4. diferencia entre SDK e IDE
- 5. ¿Diferencia entre trazo y relleno?
- 6. Diferencia entre textfieldshouldendediting y textfieldDidendediting en iPhone
- 7. isKindOfClass y NSStringFromClass no están de acuerdo con UIApplicationDelegate
- 8. ICMP y el iPhone SDK
- 9. iPhone SDK 3.2 y UIAppFonts
- 10. nombre de clase y mensajes isKindOfClass enviados a un objeto
- 11. Diferencias entre JDK y Java SDK
- 12. diferencia entre cocoa y cocoatouch
- 13. iPhone SDK: Dealloc vs. Release?
- 14. Diferencia entre presentModalViewController y presentViewController?
- 15. diferencia entre el iPhone AES (Objetivo-c) y Java
- 16. iPhone: diferencia entre nil vs Nil y verdadero vs TRUE
- 17. ¿cuál es la diferencia entre didselectrowindexpath y willselectrowindexpath en iphone?
- 18. Diferencia entre biblioteca estática y dinámica en Xcode para iPhone
- 19. Diferencia entre NSLog y DLog
- 20. Diferencia entre viewDidAppear, viewDidLoad en iPhone/iOS?
- 21. iPhone SDK - Google TTS y la codificación
- 22. Problema con iphone sdk 4.2.1
- 23. ¿Cuál es la diferencia entre una aplicación web de iPhone y una aplicación de iPhone?
- 24. iPhone sdk, excepto MPMediaItemCollection?
- 25. UIImage de CALayer - iPhone SDK
- 26. La diferencia entre $ * y $ @
- 27. Diferencia entre & y &
- 28. ¿Diferencia entre == y caso?
- 29. MySQL: diferencia entre ', `,' y"
- 30. Diferencia entre objeto y *?
¿Puede por favor aclarar mi duda más adelante? if ([lbl.textColor isMemberOfClass: [UIColor class]]) {// No Memeber NSLog (@ "Not Memeber"); } else { NSLog (@ "Not Memeber"); } if ([imgView.image isMemberOfClass: [UIImage class]]) {// Memeber NSLog (@ "Memeber"); } else { NSLog (@ "Not Memeber"); } – Nikkie