5

के दौरान भिन्न है या नहीं, क्या रनटाइम पर पता लगाने का कोई तरीका है - क्या कोई दी गई विधि विविध प्रकार का है? method_getTypeEncoding() की तरह कुछ; जो मुझे नहीं बताएगा कि कोई विधि तर्कों की चर संख्या को स्वीकार करती है या नहीं। या ऐसा कहने के लिए शायद एक चाल है?यह निर्धारित करना कि कोई उद्देश्य-सी विधि रनटाइम

+1

क्या आप थोड़ा और बता सकते हैं कि आप इस जानकारी को किस संदर्भ में चाहते हैं? मुझे यकीन नहीं है कि रनटाइम पर इसे कैसे ढूंढना है, लेकिन मुझे कई भिन्न तरीकों के निर्माण की आवश्यकता नहीं है। असल में जो मैं प्राप्त कर रहा हूं वह शायद आपको जानने की जरूरत नहीं है और एक बड़ी समस्या है। शायद लेकिन मैं हमेशा भी गलत हो सकता हूं :) –

+0

क्या होता है जब आप एक विधिवत विधि पर 'method_getNumberOfArguments()' कहते हैं? मैंने कभी कोशिश नहीं की है, लेकिन हो सकता है कि यह एक विशेष मूल्य (जैसे -1 या कुछ) देता है? 'Method_copyArgumentType() 'भी देखें। – user1118321

+1

@ user1118321 'method_getNumberOfArguments' न्यूनतम गणना देता है, जैसे कि यह सामान्य विधि थी। –

उत्तर

6

रॉबर्ट की टिप्पणी सही है। पर विचार करें:

strings asdfasdfasdf 
Boogity 
methodWithOneIntArg: 
variadicMethodWithIDSentinel: 
[email protected]:8i16 
[email protected]:[email protected] 
Hello, World! 

मैं variadic विधि बदलते हैं - (void)variadicMethodWithIDSentinel:(int)a, ... के रूप में घोषित किया जाना है, strings उत्पादन हो जाता है::

@interface Boogity 
@end 
@implementation Boogity 
- (void)methodWithOneIntArg:(int)a {;} 
- (void)variadicMethodWithIDSentinel:(id)a, ... {;} 
@end 

जिसके परिणामस्वरूप द्विआधारी पर strings चल रहा है पैदा करता है (वहाँ भी शेयर main() था)

Boogity 
methodWithOneIntArg: 
variadicMethodWithIDSentinel: 
[email protected]:8i16 
Hello, World! 

तो, नहीं, बताने का कोई तरीका नहीं है।

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