212 votes

Comment puis-je tester la classe d'un objet est en Objective-C?

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?

349voto

Vladimir Points 110327

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);

22voto

Clement M Points 317

Vous pouvez également utiliser

NSString *className = [[myObject class] description]; 

sur toute NSObject

3voto

Duke Points 1

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é.

2voto

Inder Kumar Rathore Points 13538

Si vous voulez vérifier pour une classe spécifique, alors vous pouvez utiliser

if([MyClass class] == [myClassObj class]) {
//your object is instance of MyClass
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X