objective c संपत्ति के नाम का उपयोग कर गतिशील रूप से उद्देश्य-सी संपत्ति तक पहुंचें




objective-c reflection (2)

@synthesize propertyName गेटटर और सेटर विधियों की पीढ़ी को स्वचालित करता है।

संकलक उत्पन्न करता है

  • - (id)propertyName;
  • - (void)setPropertyName;

यदि आपके पास performSelector:NSSelectorFromString रूप में कोई चयनकर्ता है, तो आप performSelector:NSSelectorFromString उपयोग कर सकते हैं।
उदाहरण के लिए:
[object performSelector:NSSelectorFromString(@"propertyName") ...]

मुझे किसी वस्तु की संपत्ति का स्ट्रिंग नाम पता है। स्ट्रिंग का उपयोग करके उस संपत्ति को प्राप्त करने और सेट करने के बारे में मैं कैसे जाउंगा?


जबकि @weichsel सही है, एक बेहतर तरीका है।

उपयोग:

[anObject valueForKey: @"propertyName"];

तथा

[anObject setValue:value forKey:@"propertyName"];

जाहिर है, @"propertyName" एक NSString हो सकता है जिसे रनटाइम पर गतिशील रूप से बनाया गया है।

इस तकनीक को कुंजी मूल्य कोडिंग कहा जाता है और कोको को मौलिक है।

यह बेहतर क्यों है क्योंकि -valueForKey ऐसा करेगा जो "बॉक्स" के लिए जरूरी है जो संपत्ति किसी ऑब्जेक्ट में लौटती है। इस प्रकार, यदि संपत्ति प्रकार int , तो यह int युक्त NSNumber उदाहरण वापस कर देगा।

इससे निपटने में बहुत आसान है - प्रदर्शन performSelector केवल उन प्रकार के लिए काम करेगा जो सूचक के लायक के रूप में फिट होते हैं।

ध्यान दें कि -setValue:forKey: भी है -setValue:forKey: :।





declared-property