我有一系列“策略”对象,我认为这些对象可以方便地实现为一组策略类的类方法。我为此指定了一个协议,并创建了要遵守的类(如下所示)
@protocol Counter
+(NSInteger) countFor: (Model *)model;
@end
@interface CurrentListCounter : NSObject <Counter>
+(NSInteger) countFor: (Model *)model;
@end
然后我有一个符合这个协议的类的数组(就像 CurrentListCounter 一样)
+(NSArray *) availableCounters {
return [[[NSArray alloc] initWithObjects: [CurrentListCounter class], [AllListsCounter class], nil] autorelease];
}
请注意我如何使用对象之类的类(这可能是我的问题 - 在 Smalltalk 中,类是像其他所有东西一样的对象 - 我不确定它们是否在 Objective-C 中?)
我的确切问题是,当我从数组中取出一个策略对象时,我想调用该方法:
id<Counter> counter = [[MyModel availableCounters] objectAtIndex: self.index];
return [counter countFor: self];
我在返回语句上收到警告 - 它说 -countFor: not found in protocol (因此它假设它是我想调用类方法的实例方法)。然而,由于我的数组中的对象是类的实例,它们现在就像实例方法(或者在概念上它们应该是)。
有没有调用类方法的神奇方法?或者这只是一个坏主意,我应该只创建我的策略对象的实例(而不是使用类方法)?