如何在自定义委托属性上调用类方法?

时间:2011-11-15 09:19:03

标签: iphone objective-c delegates class-method

我有一个“MyCLController”类,其属性“dataSource”是“MyCLController”类的数据源委托。 “MyCLController”类处理位置事件等,此类需要多种方法来查询和更新多个sqlite DB表。出于这个原因,我创建了“MyCLControlerDataSourceDelegate”协议,声明了数据源委托类应该实现的方法:

@protocol MyCLControlerDataSourceDelegate <NSObject>

@required

+ (NSArray *)getAllRegions;
+ (void)saveVisitTimeForRegionID:(NSInteger);
-(void)someInstanceMethod;

@end

这是datasource委托属性声明:

@property (nonatomic, assign) id <MyCLControlerDataSourceDelegate> dataSource;

在分配/启动我的“MyCLController”之后,我将其dataSource属性与实现MyCLControlerSourceDelegate协议的类型类的对象相链接。

我想将“MyCLController”设计为松散耦合,这样就不必知道“dataSource”类的类是什么类型。调用实例方法时,一切都很好,例如:

[self.dataSource someInstanceMethod];

但是如何调用类方法呢?我知道类方法应该被称为[ClassName classMethod],但这会使“MyCLController”不那么独立。

1 个答案:

答案 0 :(得分:-1)

其中一个解决方案是在对象上调用“class”方法。它将获取对象的类名,然后我们可以调用它的类方法,例如:

NSArray *allRegions = [[self.dataSource class] getAllRegions];