2010-05-04 15 views
8

मैं अपने *.m फ़ाइल में एक निजी संपत्ति बनाने का प्रयास:निजी संपत्ति कैसे बनाएं?

@interface MyClass (Private) 
@property (nonatomic, retain) NSMutableArray *stuff; 
@end 

@implementation MyClass 
@synthesize stuff; // not ok 

संकलक का दावा है कि वहाँ कोई सामान संपत्ति घोषित है कि। लेकिन एक सामान है। बस एक अज्ञात श्रेणी में। मुझे लगता है: असंभव। अन्य समाधान?

@interface MyClass() 
@property (nonatomic, retain) NSMutableArray *stuff; 
@end 

@implementation MyClass 
@synthesize stuff; // ok 

कक्षा एक्सटेंशन इस उद्देश्य के लिए विशेष रूप से भाग में ऑब्जेक्टिव-सी 2.0 में बनाया गया:

उत्तर

14

आप एक "वर्ग विस्तार" के बजाय एक वर्ग का उपयोग करना चाहते। कक्षा विस्तार का लाभ यह है कि संकलक उन्हें मूल श्रेणी परिभाषा के हिस्से के रूप में मानता है और इस प्रकार अपूर्ण कार्यान्वयन के बारे में चेतावनी दे सकता है।

पूरी तरह से निजी संपत्तियों के अलावा, आप केवल पढ़ने-योग्य सार्वजनिक गुण भी बना सकते हैं जो आंतरिक रूप से पढ़ने-लिखते हैं। किसी वर्ग को केवल एक्सटेंशन (रीडोनली बनाम रीडराइट) को बदलने के लिए क्लास एक्सटेंशन में पुन: घोषित किया जा सकता है लेकिन अन्यथा घोषणा में समान होना चाहिए। इस प्रकार आप कर सकते हैं:

//MyClass.h 
@interface MyClass : NSObject 
{ } 
@property (nonatomic,retain,redonly) NSArray *myProperty; 
@end 

//MyClass.m 
@interface MyClass() 
@property (nonatomic, retain, readwrite) NSArray *myProperty; 
@end 

@implementation MyClass 
@synthesize myProperty; 
//... 
@end 
+0

.m फ़ाइल में संपत्ति को दोबारा घोषित करने के बजाय, आप बस उस कोड को लिख सकते हैं जो सीधे उस संपत्ति को अंतर्निहित परिवर्तनीय बैकिंग सेट करता है। उस निहित चर के समान नाम एक अंडरस्कोर के साथ prefixed है। स्पष्टता के लिए, इसे 'स्वयं' और एक तीर (हाइफ़न + राइटएंगल) का उपयोग करके एक्सेस करें: स्वयं -> _ myProperty = ... जो कुछ भी ...; –

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