Tôi đã nhận thấy rằng các danh mục AFNetworking và SDWebImage trên UIImageView có cùng tên phương thức.Hai Danh mục trên cùng một Lớp có cùng tên phương thức
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
{
...
}
và 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];
}
...
Trong Xcode khi ta truyền cho chuột lên phương pháp SDWebImage nó chuyển hướng tôi đến phương pháp AFNetworking và ngược lại.
Tôi có thể mong đợi hành vi nào? Tôi có nên chỉ bao gồm tiêu đề cho danh mục phù hợp trong lớp tôi muốn sử dụng không? Điều gì sẽ xảy ra nếu cùng một lớp cần sử dụng cả hai triển khai của danh mục?
Một câu hỏi liên quan khác "What happens if two ObjC categories override the same method?" không hoàn toàn giống như vậy bởi vì cả AFNetworking và SDWebImage đều đang thêm Danh mục vào cùng một lớp chứ không phải lớp con. Trong trường hợp này chỉ một khi lớp đang được sử dụng và 2 loại có vẻ xung đột.
Liên quan: ["Điều gì sẽ xảy ra nếu nhiều danh mục thực hiện cùng một phương pháp?"] (Http://stackoverflow.com/a/1085500/335858). – dasblinkenlight
Đây là Xấu, và đó chính xác là lý do tại sao các khung bên thứ ba được khuyến khích mạnh mẽ để sử dụng các tiền tố trên các phương thức mà chúng thêm vào các lớp khung khác thông qua các danh mục. Các tệp tiêu đề không ảnh hưởng đến điều này; thời gian chạy tải các loại bất kể, và thứ tự, và do đó việc thực hiện bạn kết thúc với, là không xác định. –
*** Không phải là sự lừa đảo của [Điều gì sẽ xảy ra nếu hai loại ObjC ghi đè lên cùng một phương pháp?] (Http://stackoverflow.com/q/3221972) Có lẽ là một sự lừa đảo của [Mở rộng một lớp bằng cách sử dụng các loại với các phương thức giống hệt nhau name] (http://stackoverflow.com/q/4764977), [Các phương pháp ghi đè bằng cách sử dụng các danh mục trong ObjC] (http://stackoverflow.com/q/5272451) và [Ghi đè một phương thức trong ObjC qua danh mục] (http : //stackoverflow.com/q/14259517) –