मैंने देखा है कि 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 विधि और उपाध्यक्ष प्रतिकूल पर रीडायरेक्ट कमान-क्लिक करें।
मैं किस व्यवहार की अपेक्षा कर सकता हूं? क्या मुझे केवल उस श्रेणी में उचित श्रेणी के लिए हेडर शामिल करना चाहिए जिसमें मैं इसका उपयोग करना चाहता हूं? क्या होगा यदि एक ही वर्ग को श्रेणी के दोनों कार्यान्वयन का उपयोग करने की आवश्यकता हो?
एक अन्य संबंधित प्रश्न "What happens if two ObjC categories override the same method?" इस तरह से बिल्कुल समान नहीं है क्योंकि एएफनेटवर्किंग और एसडीवेब इमेज दोनों एक ही कक्षा में श्रेणियों को उप-वर्ग नहीं जोड़ रहे हैं। इस मामले में केवल एक बार कक्षा का उपयोग किया जा रहा है और 2 श्रेणियां संघर्ष में प्रतीत होती हैं।
संबंधित: ["क्या होगा अगर एकाधिक श्रेणियां एक ही विधि को लागू करें?"] (Http://stackoverflow.com/a/1085500/335858)। – dasblinkenlight
यह खराब है, और यही कारण है कि तृतीय-पक्ष ढांचे को उन तरीकों पर उपसर्गों का उपयोग करने की दृढ़ता से अनुशंसा की जाती है जो वे श्रेणियों के माध्यम से अन्य ढांचे के वर्गों में जोड़ते हैं। शीर्षलेख फ़ाइलों पर इसका कोई प्रभाव नहीं पड़ता है; रनटाइम श्रेणियों को लोड करता है, और ऑर्डर, और इसलिए आपके द्वारा कार्यान्वित कार्यान्वयन, अनिर्धारित है। –
*** नहीं *** एक डुप्ली [क्या होता है यदि दो ओबीजेसी श्रेणियां एक ही विधि को ओवरराइड करती हैं?] (Http://stackoverflow.com/q/3221972) शायद एक डुप्ली [समान विधियों वाली श्रेणियों का उपयोग करके कक्षा को विस्तारित करना नाम] (http://stackoverflow.com/q/4764977), [ओबीजेसी में श्रेणियों का उपयोग करके विधियों को ओवरराइड करना] (http://stackoverflow.com/q/5272451), और [ओबीजेसी में श्रेणी के माध्यम से एक विधि ओवरराइड करें] (http : //stackoverflow.com/q/14259517) –