में ivar संश्लेषण के लिए अंतर्निहित तंत्र क्या है आधुनिक (64 बिट ओएस एक्स और आईफोन ओएस) उद्देश्य सी रनटाइम की विशेषताओं में से एक है गुणों को गतिशील रूप से इन्हें बिना घोषित किए इवर्स को संश्लेषित करने की क्षमता वर्ग:आधुनिक उद्देश्य सी रनटाइम
@interface MyClass : NSObject {
// NSString *name; unnecessary on modern runtimes
}
@property (retain) NSStrng *name;
@end
@implementation MyClass
@synthesize name;
@end
काफी मेरे कोड का एक सा में मैं क्रम में कस्टम गेटर कार्यान्वयन का उपयोग गुण प्रारंभ करने में:
- (NSString *) name {
if (!name) {
name = @"Louis";
}
return name;
}
ऊपर के बाद से यह एक एक का उपयोग करने की जरूरत है संश्लेषित ivars के साथ असंगत है ivar कि घोषणा नहीं है हेडर में एड। विभिन्न कारणों से मैं आधुनिक रनटाइम्स पर बनाए गए संश्लेषित इवर्स का उपयोग करने के लिए अपने कई व्यक्तिगत ढांचे को अपडेट करना चाहता हूं, उपरोक्त कोड को उस लक्ष्य को प्राप्त करने के लिए संश्लेषित इवर के साथ काम करने के लिए संशोधित करने की आवश्यकता है।
उद्देश्य सी 2.0 दस्तावेज बताता है कि आधुनिक रनटाइम पर संश्लेषित एक्सेसर्स पहले उपयोग पर ivar को संश्लेषित करेंगे। यह निर्दिष्ट नहीं करता है कि ऐसा करने के लिए निम्न स्तर की तंत्र का उपयोग किया जाता है। क्या यह class_getInstanceVariable() द्वारा किया जाता है, class_addIvar() loosened पर प्रतिबंध हैं, क्या यह एक अनियंत्रित फ़ंक्शन int है जिसका उद्देश्य सी 2.0 रनटाइम है? जबकि मैं अपने गुणों का समर्थन करने वाले डेटा के लिए अपने स्वयं के साइड स्टोरेज को कार्यान्वित कर सकता हूं, लेकिन मैं उस तंत्र का उपयोग करता हूं जो एक्सेसर्स का उपयोग कर रहे हैं।
मैं सच में प्रभावित करता है, तो आप जीसीसी के सिंथेसाइज़र कोड को पढ़ने के बाद इस – Shawn