我有一系列「策略」對象,我認爲這些對象可以方便地在一組策略類中作爲類方法實現。我已指定的協議對於這一點,和創建的類,以符合(只有一個如下所示)如何在不引用類的情況下調用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