निम्नलिखित संकलन और न ही रनटाइम पर कोई name
ivar के बारे में शिकायत नहीं करता है। तो ivar और@property/@synthesize
देखने के लिए यह इतना आम क्यों है?एक संपत्ति मौजूद होने पर ivar का उद्देश्य क्या है?
@interface PropTest : NSObject
{
}
@property (retain) NSString *name;
@end
@implementation PropTest
@synthesize name;
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
PropTest *p = [[PropTest new] autorelease];
p.name = @"Hello, World!";
NSLog(@"%@",p.name);
[pool drain];
return 0;
}
इस कोड को प्रिंट
Hello, World!
वास्तव में, अगर मैं का उपयोग p->name
, मैं एक चेतावनी मिलती है:
warning: instance variable 'name' is @private; this will be a hard error in the future
जो दर्शाता है कि इवर अगर एक नहीं करता है 'मेरे लिए बनाई गई है टी मौजूद नहीं है।
यदि यह सच है, तो ivar मैन्युअल रूप से बनाने का मुद्दा क्या है (स्पष्ट रूप से अनदेखा कर रहा है कि कभी-कभी g/setter accessor का उपयोग करने के वैध कारण नहीं हैं)?
या अलग से पूछा, क्या मुझे केवल किसी संपत्ति के लिए एक ivar बनाना चाहिए जब मुझे एक्सेसर्स को बाईपास करना होगा?
मुझे लगता है कि क्रिस ने कहा कि कुछ मुद्दे हैं जो इवर घोषित नहीं करते हैं। डिबगिंग वह है जिसे मैं अक्सर चलाता हूं। – Ian1971