2012-05-13 8 views
6

संभव डुप्लिकेट:
Is this a new way to define private instance variables in Objective-C?उद्देश्य-सी में, हम @ कार्यान्वयन अनुभाग में आवृत्ति चर डाल सकते हैं?

मैं हमेशा इंटरफ़ेस .h फ़ाइल में उदाहरण चर डाल, लेकिन सिर्फ कुछ कोड यह कर देखा:

@implementation Fraction { 
    int numerator; 
    int denominator; 
} 

है जो कार्यान्वयन पक्ष में आवृत्ति चर को स्थानांतरित करने के लिए। यह भी काम करता है, लेकिन जब से हम इसे कर सकते हैं (या हम हमेशा इसे उद्देश्य-सी के साथ कर सकते हैं), और मुझे लगता है कि यह बेहतर है क्योंकि हम किस आवृत्ति चर का उपयोग करते हैं, वास्तव में एक इंटरफ़ेस का हिस्सा नहीं है।

+7

आप ([यह] पसंद कर सकते हैं http://stackoverflow.com/questions/10407848/is-this-a-new-way-to-define-private-instance-variables- इन-उद्देश्य-सी)। – Kjuly

+3

ऐसा लगता है [एलएलवीएम कंपाइलर के लिए नया] (http://stackoverflow.com/a/8015986/77939)। यदि आप चाहते हैं कि आपका कोड पोर्टेबल हो, तो मैं इसके खिलाफ अनुशंसा करता हूं। – mpontillo

उत्तर

2

हां यह पसंदीदा तरीका है और इसी तरह हम सार्वजनिक उपयोग को छिपाने के लिए निजी गुणों को परिभाषित करने के लिए कक्षा विस्तार का उपयोग करते हैं।

कुछ की तरह -

//Class Extension for private properties and methods 
@interface Fraction() 

@property (nonatomic, assign) int numerator; 

@end 

// Define private instance variable 
@implementation Fraction { 
    int numerator; 
    int denominator; 
} 

// Synthesize properties for generation of getter and setter 
@synthesize numerator = _numerator; 


@end 
+0

एक्सटेंशन इंस्टेंस वैरिएबल को भी परिभाषित कर सकता है – user102008

0

यह कार्यक्षमता ऑब्जेक्टिव-सी में पहले से ही था। इस कार्यक्षमता का मुख्य उद्देश्य डेटा छिपाने या डेटा गोपनीयता है।

यदि आप कुछ निजी चर का उपयोग करना चाहते हैं जो कक्षा के बाहर पहुंच योग्य नहीं हो सकते हैं तो आप विशेष रूप से .m फ़ाइल में श्रेणी के साथ जा सकते हैं।

एक्सकोड 4.3.2 में भी, जब आप एक नई कक्षा बनाते हैं तो डिफ़ॉल्ट रूप से .m फ़ाइल में इसमें एक श्रेणी होती है। (कार्यान्वयन से ठीक पहले)।

ViewController.m 

**@interface ViewController() 
@end** 


@implementation ViewController ....... 

उस इंटरफ़ेस में आप अपने निजी सदस्यों को वहां पर घोषित कर सकते हैं। और आप उन्हें अपनी संपूर्ण .m फ़ाइल में [self variableName] के साथ आसानी से उपयोग कर सकते हैं।

वैसे ही आप उसी श्रेणी में अपनी निजी विधियों की घोषणा कर सकते हैं।

तो कक्षा फ़ाइल के बाहर बनाई गई आपकी इंस्टेंस ऑब्जेक्ट इन चर और विधियों को नहीं पढ़ सकती है।

आशा है कि आप यही खोज रहे हैं।

कोडिंग का आनंद लें :)

+1

तकनीकी रूप से, '() 'श्रेणी एक्सटेंशन को चिह्नित करता है, श्रेणी नहीं। – echristopherson

+0

हां आप सही हैं लेकिन आंतरिक रूप से केवल एक प्रकार की श्रेणी का विस्तार करते हैं। केवल अंतर यह है कि - वे घोषित विधियों को इसी वर्ग के लिए मुख्य @ कार्यान्वयन ब्लॉक में लागू किया जाना चाहिए। विशेष रूप से श्रेणियों के साथ घोषित श्रेणियां() कोई अतिरिक्त नाम एक्सटेंशन कहा जाता है। – Mrunal

+0

मेरा उद्देश्य प्रश्न में उल्लिखित समस्या को हल करना था और मुझे लगता है कि इस श्रेणी/एक्सटेंशन कार्यक्षमता उस के लिए बेहतर समाधान है। – Mrunal

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