如何扩展基于私有方法的类方法

时间:2011-10-12 11:17:29

标签: objective-c cocoa delegates private-members

假设我有一个具有以下结构的类,我希望覆盖其委托方法之一(或更多,通常是其公共方法之一),但现在它基于一些私有方法。有没有办法扩展它,或者我应该简单地断定它的设计没有考虑到可扩展性?

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

我还需要引用私有方法,如果我实际上将继续扩展类,但显然我不想访问任何私有方法。 如果这个问题听起来有点微不足道,我很抱歉。

由于

2 个答案:

答案 0 :(得分:3)

您可以在单独的头MyBaseClassPrivate.h中声明私有方法,而不是在实现文件中,并将其导入子类中。

答案 1 :(得分:0)

难道你不能创建一个声明子类应该实现的方法的协议吗?基类将采用该协议;子类负责各自的实现。基类实现可以提供一些通用功能,或仅提供return;

@protocol MyBaseClassPrivateProtocol
- (void)_privateMethod1;
- (void)_privateMethod2;
@end

@interface MyBaseClass : UIViewController <MyBaseClassPrivateProtocol> 

@end