web-dev-qa-db-fra.com

Différence iOS entre isKindOfClass et isMemberOfClass

Quelle est la différence entre les fonctions isKindOfClass:(Class)aClass et isMemberOfClass:(Class)aClass? Je sais que c'est quelque chose de petit comme, l'un est global alors que l'autre est une correspondance exacte de classe mais j'ai besoin de quelqu'un pour spécifier lequel est qui s'il vous plaît.

Dans Swift isKind(of aClass: AnyClass) et isMember(of aClass: AnyClass).

146
NoodleOfDeath

isKindOfClass: retourne YES si le destinataire est une instance de la classe spécifiée ou une instance de toute classe qui hérite de la classe spécifiée.

isMemberOfClass: retourne YES si, et seulement si, le destinataire est une instance de la classe spécifiée.

La plupart du temps, vous voulez utiliser isKindOfClass: pour vous assurer que votre code fonctionne également avec des sous-classes.

Le référence de protocole NSObject parle un peu plus de ces méthodes.

257
Sebastian Celis
  • isKindOfClass: indique si un objet hérite d'une classe donnée
  • isMemberOfClass: indique si un objet est une instance de une classe donnée.

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

Supposer

@interface A : NSObject 
@end

@interface B : A
@end

...

id b = [[B alloc] init];

puis

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

Fondamentalement, -isMemberOfClass: est vrai si l'instance est exactement de la classe spécifiée, alors que -isKindOfClass: est vrai si l'instance est exactement de la classe spécifiée ou si l'un des ancêtres de l'instance appartient à la classe spécifiée.

-isMemberOfClass: est rarement utilisé.

48
kennytm

isKindOfClass: renvoie une valeur booléenne indiquant si le destinataire est une instance d'une classe donnée ou une instance d'une classe qui hérite de cette classe.

isMemberOfClass: renvoie une valeur booléenne indiquant si le destinataire est une instance d'une classe donnée.

9
Alex Terente

isKindOfClass-> return YES lorsque l'objet est une instance de cette classe ou une instance d'une classe héritée de celle-ci.

isMemberOfClass: retourne YES lorsque l'objet est une instance de cette classe mais non dans le cas où: instance d'une classe qui en a été héritée.

exemple est assez bon dans la réponse de jtbandes.

2
Ishu
0
Art Swri