À partir de la isKindOfClass: documentation de la méthode de NSObject:
Soyez prudent lorsque vous utilisez cette méthode sur des objets représentés par une classe de cluster. En raison de la nature de clusters de classe, l'objet que vous recevez peuvent pas toujours être le type que vous avez prévu.
La documentation procède ensuite à donner un exemple de pourquoi vous devriez ne jamais demander quelque chose comme la suite d'un NSArray exemple:
// DO NOT DO THIS!
if ([myArray isKindOfClass:[NSMutableArray class]])
{
// Modify the object
}
Maintenant, pour donner un exemple d'une utilisation différente, disons que j'ai une instance de NSObject où je voulez savoir si j'ai un NSString ou NSArray.
Ces deux types sont des clusters de classe -, mais il semble d'après la documentation ci-dessus que le danger réside dans la réponse à isKindOfClass: être trop affirmatif (répondre par OUI, parfois, quand vous n'avez vraiment pas une mutable tableau) alors que de poser une question sur la simple appartenance à un cluster reste valide.
Un exemple:
NSObject *originalValue;
// originalValue gets set to some instance
if ( [originalValue isKindOfClass:[NSString class]] )
// Do something with string
Cette hypothèse est correcte? Est-il vraiment sûr à utiliser isKindOfClass: contre la classe des instances de cluster afin de déterminer la composition? Je suis particulièrement intéressé par la réponse de l'omniprésence de la NSString, NSArray et NSDictionary, mais je serais intéressé de savoir si c'est généralisable.