【发布时间】:2011-11-15 09:19:02
【问题描述】:
我有一个“MyCLController”类,其属性“dataSource”是“MyCLController”类的数据源委托。 “MyCLController”类处理位置事件等,这个类需要几个方法来查询和更新几个sqlite DB表。出于这个原因,我创建了“MyCLControlerDataSourceDelegate”协议来声明数据源委托类应该实现哪些方法:
@protocol MyCLControlerDataSourceDelegate <NSObject>
@required
+ (NSArray *)getAllRegions;
+ (void)saveVisitTimeForRegionID:(NSInteger);
-(void)someInstanceMethod;
@end
这是数据源委托属性声明:
@property (nonatomic, assign) id <MyCLControlerDataSourceDelegate> dataSource;
在分配/初始化我的“MyCLController”之后,我将其 dataSource 属性与实现 MyCLControlerDataSourceDelegate 协议的类类型对象链接。
我想将“MyCLController”设计为松耦合,这样它就不必知道“dataSource”属性是什么类型的类。一切都很好,调用实例方法时,例如:
[self.dataSource someInstanceMethod];
但是调用类方法呢?我知道应该将类方法称为 [ClassName classMethod] 但这会使“MyCLController”的独立性降低。
【问题讨论】:
-
为什么它们是类方法?如果你有一个实例,你必须为委托做,那么似乎所有的委托方法都应该是实例方法。
-
因为,我正在做一个项目,我必须只执行我的任务,而不是打破项目的工作惯例。所有 DB 类及其查询方法都是类方法,并且这些类不是单例(除了它们使用 DB 单例),它们只是查询 DB。实际上我不需要分配/初始化任何这些类。我从用户的角度而不是从objective-c 及其限制的角度来看待这种需求。只是好奇是否有可能以其他方式进行。
-
作为一个程序员,我也可能被认定为使用objective-c和iOS的用户,从这个角度来看,我觉得对我来说会很方便。但如果不可能,我会放弃:)
标签: iphone objective-c delegates class-method