2012-07-03 8 views
11

मैं निम्नलिखित वर्ग इंटरफेस है:उद्देश्य सी: निजी उदाहरण गुण कहां घोषित करें?

@interface MyClass : NSObject 

@property int publicProperty; 

@end 

तो कार्यान्वयन:

@interface MyClass() // class extension 

- (void)privateMethod; // private methods 

@end 

@implementation MyClass { 
    int _privateProperty; 
} 

@property int privateProperty = _privateProperty; 

@end 

यह है कि क्या एप्पल पुरुष WWDC में पता चला है, लेकिन वहां नहीं की तरह वर्ग विस्तार में _privateProperty डालने के लिए किसी भी कारण है :

@interface MyClass() // class extension 
{ 
    int _privateProperty; 
} 

- (void)privateMethod; // private methods 

@end 

धन्यवाद!

+0

आप कई अच्छा जवाब मिल सकता है यहां आपके प्रश्न के लिए: http://stackoverflow.com/search?q=private+property – Monolo

+0

संभावित डुप्लिकेट [निजी संपत्ति कैसे बनाएं?] का लाइसेंस [http://stackoverflow.com/questions/2768750/how-to-make-a-private-property) – Monolo

उत्तर

5

आप न दोनों इंटरफेस और implementation.Because में अपने ivars घोषित करने के लिए आप उन्हें निजी तुम सिर्फ उन्हें इतनी तरह कार्यान्वयन फ़ाइल में घोषित कर सकते हैं बनाना चाहते हैं:

@implementation { 

int firstVariable; 
int secondVariable; 
... 
} 
//properties and code for your methods 

यदि आप चाहते हैं, तो आप गेटटर और सेटर विधियों को बना सकते हैं ताकि आप उन चरों तक पहुंच सकें।

जिस व्यक्ति से आपने बात की थी वह सही था, सोचा कि ऐसा कोई कारण नहीं है कि आप उन्हें इंटरफ़ेस में उसी तरह घोषित क्यों न करें। कुछ किताबें वास्तव में आपको सिखाती हैं कि @interface कक्षा का सार्वजनिक चेहरा दिखाता है और आपके पास कार्यान्वयन में क्या होगा निजी होगा।

0

क्या आपका मतलब है कि आप निजी आवृत्ति चर घोषित करना चाहते हैं?

आप ऐसा कर सकते हैं:

@interface MyClass() 
{ 
@private //makes the following ivar private 
    int _privateProperty; 
} 
+0

हाँ, लेकिन मैं इसे ivar बनाना नहीं चाहता, यह केवल एक ऐसी संपत्ति है जिसे एक्सेसर का उपयोग करके self.privateProperty द्वारा एक्सेस किया जा सकता है, और @interface में इसका खुलासा नहीं किया जा सकता है। – hzxu

+0

आप इसे इस '@property int privProperty = _privateProperty' द्वारा नहीं कर सकते हैं, आपको इसे कार्यान्वयन फ़ाइल में करना है। –

0

"आधुनिक रनटाइम" (64-बिट मैकोज़ पोस्ट -10.5 और आईओएस के सभी संस्करणों) के साथ, आपको आवृत्ति चर घोषित करने की आवश्यकता नहीं है।

// MyClass.h 
@interface MyClass : NSObject 

@property int publicProperty; 

@end 


// MyClass.m 
@implementation MyClass 

@synthesize publicProperty = _privateProperty; // int _privateProperty is automatically synthesized for you. 

@end 
9

मैं आमतौर पर "मजबूर" निजी कार्यान्वयन

में एक विस्तार के साथ अपने हैडर

@interface MyClass : NSObject 
{ 
} 

@property (nonatomic, assign) int publicProperty; 

@end 

में अपने कार्यान्वयन फ़ाइल में:

@interface MyClass() 
@property (nonatomic, assign) int privateProperty; 
@end 


@implementation MyClass 
@synthesize privateProperty; 
@synthesize publicProperty; 

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