我有一系列“策略”对象,我认为这些对象可以方便地在一组策略类中作为类方法实现。我已指定的协议对于这一点,和创建的类,以符合(只有一个如下所示)如何在不引用类的情况下调用Objective C中的+类方法?
@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?)
我的确切的问题是当我想打电话给我的时候, licy对象从数组中:
id<Counter> counter = [[MyModel availableCounters] objectAtIndex: self.index];
return [counter countFor: self];
我得到return语句的警告 - 它说-countFor:在协议未找到(因此它假定它,我想调用类方法的实例方法)。然而,由于我的数组中的对象是类的实例,它们现在像实例方法(或概念上它们应该是)。
是否有一种神奇的方法来调用类方法?或者这只是一个坏主意,我应该创建我的策略对象的实例(而不是使用类方法)?
计数器不计数器 – 2009-05-31 12:31:10