2012-10-01 10 views
6

जब निम्न विधि परिभाषा संकलित (का उपयोग कर एप्पल LLVM 4.1) मैं हैरान था:ऑब्जेक्टिव-सी विधि वाक्य रचना

- (void) testMethod:someArgument { 

} 

सूचना someArgument के प्रकार याद आ रही है। विधि तर्कों के प्रकार निर्दिष्ट करने के बारे में उद्देश्य-सी में नियम क्या है?

उत्तर

7

डिफ़ॉल्ट तर्क प्रकार id है। यहां तक ​​कि इस संकलन होगा:

- testMethod:someArgument { 
} 

यह एक विधि है कि इसके तर्क के रूप में एक id लेता है और एक id लौट जाना है।

वास्तव में, नहीं भी विधि नाम आवश्यक है:

- :someArgument { 
} 

यह कहा जा सकता है के रूप में:

[self :someObject]; 
बेशक

यह सब बहुत बुरा व्यवहार है और आप हमेशा निर्दिष्ट करना चाहिए प्रकार (और नाम)।

+0

दिलचस्प! मुझे उद्देश्य-सी पसंद है और भी अधिक जानने के लिए '-: v {}' compiles :-) – SundayMonday

+2

मैं ऐसे प्रश्नों का उत्तर देने से इनकार करता हूं जो इस तरह के तरीकों का उपयोग करते हैं :-D – DrummerB

+1

और यदि आप संकलित करने वाली सबसे छोटी विधि की तलाश में हैं, तो शायद '-a {}' ;-) – DrummerB

2

विधि तर्क में "प्रकार" का उपयोग कंपाइलर और रन-टाइम संदेश पास करने के लिए प्रकार की जांच के लिए किया जाता है।

जिस तरह से इसे आपके प्रोटोटाइप में कहा जा रहा है, यह "(id)" के बराबर है।

आप ऐप्पल के Programming with Objective C document के "पैरामीटर पैरामीटर ले सकते हैं" अनुभाग में अधिक जानकारी प्राप्त कर सकते हैं। मुझे "The Objective-C Programming Language" document के "ऑब्जेक्ट मैसेजिंग" खंड में कुछ बहुत ही मददगार जानकारी भी दिखाई देती है।

2

भाषा विनिर्देश राज्यों:

तो वापसी या पैरामीटर प्रकार स्पष्ट रूप से घोषित नहीं है, यह मान लिया है तरीकों और संदेशों-एक आईडी के लिए डिफ़ॉल्ट प्रकार किया जाना है।

http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/objectivec/chapters/ocDefiningClasses.html

1

ऑब्जेक्टिव-सी प्रोग्रामिंग भाषाtells us:

ऐसी विधि वापसी मान के रूप में ऑब्जेक्टिव-सी, की वस्तु उन्मुख निर्माणों के लिए, आईडी के रूप में पूर्णांक बदल देता है डिफ़ॉल्ट डेटा प्रकार। (सख्ती से सी संरचनाएं, जैसे फंक्शन रिटर्न वैल्यू, int डिफ़ॉल्ट प्रकार बनी हुई है।)

संबंधित मुद्दे