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では、SDWebImageメソッドをコマンドクリックすると、AFNetworkingメソッドにリダイレクトされます。その逆も同様です。
どの動作がどこで期待できますか?使用したいクラスに適切なカテゴリのヘッダーのみを含める必要がありますか?同じクラスがカテゴリの両方の実装を使用する必要がある場合はどうなりますか?
別の関連する質問「2つのObjCカテゴリが同じメソッドをオーバーライドするとどうなりますか?」は、AFNetworkingとSDWebImageの両方がサブクラスではなく同じクラスにカテゴリを追加しているため、これとまったく同じではありません。この場合、クラスが使用されているのは1回だけで、2つのカテゴリが競合しているようです。