在我从一本书中获得的类别中,指定了一个协议。它需要一个方法,并在类别中声明该方法。
如果我在另一个对象(表格视图单元格)中实现协议,我的理解是我必须包含所需的方法。但是,除了方法的标题与类别中的标题相同之外,我是否继承了类别版本中的任何代码?该代码是有意义的,因为只有在代码完成后我才能做某事。
类别:.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
}
答案 0 :(得分:1)
由于该类别是UIImageView
上的类别,因此只会向该类添加方法。
由于您的类源自UITableViewCell
且未直接或间接地从UIImageView
派生,因此它不从类别继承-didCompleteDownloadForURL:withData:
的实现。
我猜测类别的方法无论如何都不是协议方法的适当实现。它有相同的签名,但我怀疑它有不同的目的。特别是,我怀疑类别方法的目的至少部分是将调用转发给实现协议的委托。因此,委托本身继承该实现是没有意义的。
类别方法和协议方法具有相同的签名只是巧合。事实上,我建议将类别方法更改为以唯一前缀开头,以便它不会与UIImageView
上的方法发生冲突,该方法可能是Apple私有的,也可能是未来版本的UIKit中添加的