我注意到UIImageView上的AFNetworking和SDWebImage類別具有相同的方法名稱。使用相同的方法名稱在同一類上的兩個類別
AFNetworking:
- (void)setImageWithURL:(NSURL *)url {
[self setImageWithURL:url placeholderImage:nil];
}
- (void)setImageWithURL:(NSURL *)url
placeholderImage:(UIImage *)placeholderImage
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPShouldHandleCookies:NO];
[request addValue:@"image/*" forHTTPHeaderField:@"Accept"];
[self setImageWithURLRequest:request placeholderImage:placeholderImage success:nil failure:nil];
}
- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest
placeholderImage:(UIImage *)placeholderImage
success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success
failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error))failure
{
...
}
和SDWebImage
- (void)setImageWithURL:(NSURL *)url
{
[self setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil];
}
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder
{
[self setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil];
}
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options
{
[self setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil];
}
...
在Xcode中,當我命令點擊它重定向我到AFNetworking方法和反之亦然SDWebImage方法。
我可以期待哪種行爲?我是否應該只在課堂中包含適當類別的標題,我想在其中使用它?如果同一個類需要同時使用這兩個類的實現呢?
另一個相關的問題「What happens if two ObjC categories override the same method?」與此不太一樣,因爲AFNetworking和SDWebImage都將類別添加到相同的類而不是子類。在這種情況下,只有一次課程正在使用,兩個類別似乎有衝突。
相關:[「如果多個類別實現相同的方法呢?」](http://stackoverflow.com/a/1085500/335858)。 – dasblinkenlight
這很糟糕,這也正是爲什麼強烈建議第三方框架在通過類別將其添加到其他框架類的方法上使用前綴的原因。頭文件對此沒有影響;運行時會加載類別,而且順序以及最終的實現都是未定義的。 –
***不是*** [如果兩個ObjC類別重寫相同的方法會發生什麼?](http://stackoverflow.com/q/3221972)可能是[使用相同的方法使用類別擴展類名稱](http://stackoverflow.com/q/4764977),[在ObjC中使用類別重寫方法](http://stackoverflow.com/q/5272451)和[在類別中覆蓋ObjC中的方法](http ://stackoverflow.com/q/14259517) –