假设我有一个具有以下结构的类,我希望覆盖其委托方法之一(或更多,通常是其公共方法之一),但现在它基于一些私有方法。有没有办法扩展它,或者我应该简单地断定它的设计没有考虑到可扩展性?
MyBaseClass.h:
@interface MyBaseClass : UIView <UITableViewDataSource, UITableViewDelegate>
{
}
// some public methods
@end
MyBaseClass.m:
@interface MyBaseClass (Private)
- (void)_privateMethod1;
- (void)_privateMethod2;
@end
#pragma mark - UITableViewDataSource
// ------ I'D LIKE TO CHANGE THE BEHAVIOR OF THIS METHOD EXTENDING MyBaseClass
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)rowIndexPath {
[self _privateMethod1];
[self _privateMethod2];
}
@end
我还需要引用私有方法,如果我实际上将继续扩展类,但显然我不想访问任何私有方法。 如果这个问题听起来有点微不足道,我很抱歉。
由于
答案 0 :(得分:3)
您可以在单独的头MyBaseClassPrivate.h中声明私有方法,而不是在实现文件中,并将其导入子类中。
答案 1 :(得分:0)
难道你不能创建一个声明子类应该实现的方法的协议吗?基类将采用该协议;子类负责各自的实现。基类实现可以提供一些通用功能,或仅提供return;
@protocol MyBaseClassPrivateProtocol
- (void)_privateMethod1;
- (void)_privateMethod2;
@end
@interface MyBaseClass : UIViewController <MyBaseClassPrivateProtocol>
@end