Как расширить метод класса, основанный на частных методах - PullRequest
1 голос
/ 12 октября 2011

Допустим, у меня есть класс со следующей структурой, и я хочу переопределить один из его методов делегата (или более, в общем, один из его открытых методов), но теперь он основан на некоторых частных методах.Есть ли способ расширить его или я должен просто заключить, что он не был разработан с учетом расширяемости?

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 ]

3 голосов
/ 12 октября 2011

Вы можете объявить свои закрытые методы в отдельном заголовке MyBaseClassPrivate.h вместо файла реализации и импортировать его в подкласс.

0 голосов
/ 12 октября 2011

Не могли бы вы создать протокол, в котором вы объявляете методы, которые должны реализовывать подклассы? Базовый класс примет этот протокол; и подклассы ответственны за их соответствующую реализацию. Реализация базового класса может предоставлять некоторые общие функции или просто return;

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

@interface MyBaseClass : UIViewController <MyBaseClassPrivateProtocol> 

@end
...