委托方法是否从协议类中的方法继承?

时间:2015-10-28 17:46:19

标签: objective-c delegates

在我从一本书中获得的类别中,指定了一个协议。它需要一个方法,并在类别中声明该方法。

如果我在另一个对象(表格视图单元格)中实现协议,我的理解是我必须包含所需的方法。但是,除了方法的标题与类别中的标题相同之外,我是否继承了类别版本中的任何代码?该代码是有意义的,因为只有在代码完成后我才能做某事。

类别:.m

@protocol DownloadHelperDelegate <NSObject>

-(void)didCompleteDownloadForURL:(NSString *)url withData:(NSMutableData *)data;

@end

- (void)didCompleteDownloadForURL:(NSString *)url withData:(NSMutableData *)data{
    // doThis
    // doThat
    // readyToDoSomethingElsewhere
}

在tableviewCell中:.h

#import "category.h";
@protocol category

的.m

-(void)didCompleteDownloadForURL:url withData:data;
{
    // Did doThis happen?
    // Did doThat happen?
    // If so, I want to do Something 
}

1 个答案:

答案 0 :(得分:1)

由于该类别是UIImageView上的类别,因此只会向该类添加方法。

由于您的类源自UITableViewCell且未直接或间接地从UIImageView派生,因此它不从类别继承-didCompleteDownloadForURL:withData:的实现。

我猜测类别的方法无论如何都不是协议方法的适当实现。它有相同的签名,但我怀疑它有不同的目的。特别是,我怀疑类别方法的目的至少部分是将调用转发给实现协议的委托。因此,委托本身继承该实现是没有意义的。

类别方法和协议方法具有相同的签名只是巧合。事实上,我建议将类别方法更改为以唯一前缀开头,以便它不会与UIImageView上的方法发生冲突,该方法可能是Apple私有的,也可能是未来版本的UIKit中添加的