मैं हाल ही में Xcode 4.3.2 के लिए अद्यतन किया और पाया कि मैं अभी की तरह @implementation
ब्लॉक के अंदर निजी उदाहरण चर घोषणा कर सकते हैं किया है:क्या उद्देश्य-सी में निजी आवृत्ति चर को परिभाषित करने का यह एक नया तरीका है?
@interface TestClass : NSObject
@property (nonatomic, copy) NSString *testProp;
@end
@implementation TestClass {
NSString *_testPropStore;
}
- (NSString *)testProp { return _testPropStore; }
- (void)setTestProp:(NSString *)testProp { _testPropStore = [testProp copy]; }
- (id)init {
if (self = [super init]) {
_testPropStore = nil;
}
return self;
}
@end
सूचना @implementation
अंदर NSString *_testPropStore
लाइन ब्रेस ब्लॉक।
मैं भी निम्न कोड के साथ परीक्षण किया है:
TestClass *c1 = [[TestClass alloc] init];
TestClass *c2 = [[TestClass alloc] init];
c1.testProp = @"Hello";
c2.testProp = @"World";
NSAssert(c1.testProp == c2.testProp, @"It's working!");
कौन सा अच्छा काम करने लगता है। (यानी, ऐप एनएसएसएसएसएसर्ट लाइन पर "यह काम कर रहा है" संदेश से दुर्घटनाग्रस्त हो जाता है।)
तो यह निजी उदाहरण चर घोषित करने के लिए उद्देश्य-सी की एक नई विशेषता है? चूंकि मैंने इसे दुर्घटना से खोजा है, इसलिए मुझे यह जानना अच्छा लगेगा कि यह केवल निजी आवृत्ति चर घोषित करने के लिए है या क्या कोई दुष्प्रभाव होगा जिसके बारे में मुझे पता नहीं है?
मुझे कोई प्रासंगिक दस्तावेज नहीं मिला क्योंकि private
शब्द के साथ इस प्रकार के अधिकांश प्रश्नों को सिर्फ एक निजी एक्सटेंशन श्रेणी पर घोषित करने के तरीके के उत्तर के साथ समाप्त हो गया है।
मैं अधिक उत्सुक हूं कि यह हुड के नीचे कैसे किया जाता है। ऑब्जेक्टिव-सी रनटाइम कैसे जानता है कि हेडर की अपूर्ण परिभाषा है तो कक्षा के लिए कितनी मेमोरी आवंटित की जाती है? – mpontillo
पोस्ट करने के लिए यह एक अच्छा सवाल होगा। यह लगभग निश्चित रूप से ["गैर-नाजुक ivars"] (http://www.sealiesoftware.com/blog/archive/2009/01/27/objc_explain_Non-fragile_ivars.html) के साथ कुछ करने के लिए है। –
एफवाईआई, आपके उत्तर में लिंक मेरे लिए टूटा हुआ प्रतीत होता है। –