Comment faire pour tester si un objet est une instance d'une classe particulière en Objective-C? Disons que je veux voir si un objet est une instance de classe b ou de classe c, comment dois-je aller sur le faire?
Réponses
Trop de publicités?Pour tester si un objet est une instance de la classe a:
[yourObject isKindOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of
// given class or an instance of any class that inherits from that class.
ou
[yourObject isMemberOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of a
// given class.
Pour obtenir de l'objet nom de la classe, vous pouvez utiliser NSStringFromClass
fonction de:
NSString *className = NSStringFromClass([yourObject class]);
ou c-fonction d'objective-c d'exécution de l'api:
#import <objc/runtime.h>
/* ... */
const char* className = class_getName([yourObject class]);
NSLog(@"yourObject is a: %s", className);
Ce qui signifie qu'environ isKindOfClass dans la Documentation d'Apple
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. Si vous appelez une méthode qui retourne une classe de cluster, le type retourné par la méthode est le meilleur indicateur de ce que vous pouvez faire avec cet objet. Par exemple, si une méthode retourne un pointeur vers un NSArray objet, vous ne devriez pas utiliser cette méthode pour voir si le tableau est mutable, comme illustré dans le code suivant:
// DO NOT DO THIS!
if ([myArray isKindOfClass:[NSMutableArray class]])
{
// Modify the object
}
Si vous utilisez de telles constructions dans votre code, vous pourriez penser qu'il est bien de modifier un objet qui en réalité ne doit pas être modifié. Cela peut ensuite créer des problèmes pour un autre code que prévu à l'objet reste inchangé.