Comment dois-je appeler +les méthodes de la classe en Objective-C sans faire référence à la classe?

J'ai une série de "politique" des objets qui j'ai pensé que cela pourrait être pratique de mettre en œuvre les méthodes de la classe sur un ensemble de classes. J'ai spécifié un protocole pour cela, et créé des classes pour les rendre conformes à (juste celui qui est illustré ci-dessous)

@protocol Counter   
+(NSInteger) countFor: (Model *)model;
@end

@interface CurrentListCounter : NSObject <Counter> 
+(NSInteger) countFor: (Model *)model;
@end

J'ai ensuite un tableau des classes qui sont conformes à ce protocole (comme CurrentListCounter ne)

+(NSArray *) availableCounters {
return [[[NSArray alloc] initWithObjects: [CurrentListCounter class], [AllListsCounter class], nil] autorelease];
}

Avis comment je suis en utilisant les classes comme des objets (et ce pourrait être mon problème en Smalltalk les classes sont des objets comme tout le reste - je ne suis pas sûr si elles sont dans l'Objective-C?)

Mon problème est lorsque je veux appeler la méthode lorsque je prends un des objets de stratégie de sortie de la matrice:

id<Counter> counter = [[MyModel availableCounters] objectAtIndex: self.index];
return [counter countFor: self];

Je reçois un avertissement sur l'instruction return - il dit -countFor: n'est pas trouvé dans le protocole (donc sa en supposant que c'est une méthode d'instance où je veux appeler une méthode de classe). Cependant, comme les objets de mon tableau sont des instances de la classe, ils sont maintenant comme des méthodes d'instance (ou sur le plan conceptuel qu'ils devraient être).

Est-il une solution magique pour appeler les méthodes de la classe? Ou est-ce juste une mauvaise idée, et je viens de créer des instances de mes objets de stratégie (et ne pas utiliser les méthodes de la classe)?

Compteur de pas à l'encontre de

OriginalL'auteur TimM | 2009-05-31