तकनीकी रूप से, उद्देश्य-सी में विधि अधिभार संभव नहीं है। अभ्यास में आप आमतौर पर वही परिणाम प्राप्त कर सकते हैं, ऐसे मामलों में जहां आप सी ++ में नहीं कर सकते थे। उद्देश्य-सी में, विधि नामों में प्रत्येक तर्क के सामने एक कोलन शामिल होता है, और कोलन विधि नाम का हिस्सा होते हैं, जिसका अर्थ है कि आपका उदाहरण विभिन्न विधि नामों का उपयोग करता है। प्रैक्टिस में यह छद्म नामित पैरामीटर कार्यक्षमता का एक प्रकार बन जाता है, और आप तर्क TYPE के बजाय तर्क फ़ंक्शन द्वारा एक छद्म विधि अधिभार प्राप्त कर सकते हैं। ज्यादातर मामलों में यह वास्तव में अधिक उपयोगी होगा, लेकिन यह सख्त अर्थ में विधि अधिभार नहीं है, क्योंकि विधि नाम अलग हैं।
उदाहरण:
-(void)makeSquareWithX1:(float)x1 Y1:(float)y1 X2:(float)x2 Y2:(float)y2;
-(void)makeSquareWithX1:(float)x1 Y1:(float)y1 width:(float)width height:(float)height;
यह ऑब्जेक्टिव-सी में काम करेगा, लेकिन आप सी ++ में इसी तरह की सुविधा नहीं मिल सका, तर्क संख्या और प्रकार के होते हैं, क्योंकि एक ही है, केवल तर्क कार्यों अलग हैं। कुछ मामलों में सी ++ मॉडल अधिक उपयोगी कार्यक्षमता प्राप्त कर सकता है। यह NSKeyedArchiver वर्ग द्वारा दर्शाया गया है:
-(void)encodeFloat:(float)realv forKey:(NSString *)key
-(void)encodeInt32:(int32_t)intv forKey:(NSString *)key
यहाँ वे तर्क प्रकारों moethod नाम है, जो बदसूरत है का हिस्सा बनाने के लिए किया था। अगर मैं सी ++ ओवरलोडिंग और ऑब्जेक्टिव-सी "ओवरलोडिंग" के बीच चयन कर सकता हूं, तो भी मैं बाद वाले को चुनूंगा।
@interface MyClass
{
}
@end
@interface MyClass (MethodVersion1)
- (void) doSomething : (int) val;
@end
@interface MyClass (MethodVersion2)
- (void) doSomething : (double) val;
@end
अलग पैरामीटर प्रकार से श्रेणियाँ हल कर रहे हैं:
मैं पढ़ लिया है कई बार कह रही है कि समारोह से अधिक भार प्रोग्रामर उद्देश्य सी में संभव नहीं है – Matrix
मैं सही हूँ? .... – Matrix
यह अधिभारित नहीं है, आपके तरीकों के अलग-अलग चयनकर्ता हैं (= नाम)। एक 'AddMethod:' है और दूसरा 'AddMethod :: ' – Sven