2010-07-15 8 views
1

Disons que j'ai une méthode qui prend une classe, qui est appelé comme ceci:Comment interroger une classe de manière sécurisée?

[registry registerClass:[MyClass class]]; 

Comment puis-je interroger la classe à l'intérieur -registerClass:?

-(void) registerClass:(Class)typeClass { 

    // Verify that instances of typeClass confirm to protocol/respondsToSelector 

    // ? 

    // Do stuff 
    // ... 
    [myListOfClasses addObject:typeClass]; 
    // ... 
} 

C'est le "?" Je me demande à propos de. Puis-je en toute sécurité (et toujours) diffuser Class foo en NSObject *fooObj et lui envoyer des messages, en supposant que foo sera toujours une sous-classe de NSObject? Y a-t-il une métaclasse racine dont toutes les métaclasses NSObject héritent? Ou tous les objets Class sont-ils simplement des instances d'une seule métaclasse?

Répondre

2

La classe Class est également un objet et peut avoir des méthodes appelées. La liste 5 dans this Apple example montre quelques exemples de méthodes qui peuvent être appelées sur un objet Class.

Plus précisément, vous pouvez appeler conformsToProtocol: sur l'objet de classe tels que:

[ typeClass conformsToProtocol: @protocol(MyProtocol) ]; 

Ou vous pouvez utiliser instancesRespondToSelector: pour voir si les instances de cette classe implémente le sélecteur.

[ typeClass instancesRespondToSelector: @selector(MyNeatMethod) ]; 

Soyez conscient que l'appel respondsToSelector sur l'objet de classe testera les méthodes de classe que les classe implémente et non pas des méthodes d'instance de la classe.

+0

Merci pour cette info, savez-vous où je peux trouver une référence de cours? J'ai récuré le net en essayant de trouver de la documentation - et les documents de référence d'Apple ne sont pas vraiment utiles par rapport à quelque chose de plus navigable comme JavaDoc. – Sophistifunk

+0

Le manuel Apple Objective C parle un peu de la façon dont les classes sont des objets mais pas de manière très détaillée, http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/ObjC.pdf. Beaucoup de méthodes de classe dans NSObject devraient pouvoir être appelées mais seulement certaines ont du sens. http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html. Sinon, je n'ai pas encore trouvé un bon synopsis sur la façon d'interagir avec un objet Class. –

+0

Cette discussion est intéressante mais elle est aussi un peu abstraite, http://cocoawithlove.com/2010/01/what-is-meta-class-in-objective-c.html. –

Questions connexes