2012-07-19 32 views
11

से निजी संपत्ति का उपयोग कैसे करें मैं अपनी श्रेणी से कक्षा की निजी संपत्ति तक पहुंच बनाना चाहता हूं।, श्रेणी

लेकिन निजी संपत्ति तक पहुंचने के लिए, मुझे श्रेणी में एक ही निजी संपत्ति को फिर से शुरू करना होगा।
यदि मैं पुनर्विक्रय नहीं करता हूं, तो मुझे एक संकलन त्रुटि मिलती है, Property '<property name>' not found on object of type '<class name> *'

क्या श्रेणी से कक्षा की निजी संपत्ति तक पहुंचने का यह सही तरीका है?
और क्या ऐसा करने के बेहतर तरीके हैं?

ClassA.h

@interface ClassA : NSObject 
-(void)method1; 
@end 

ClassA.m

#import "ClassA.h" 

// private property 
@interface ClassA() 
@property (nonatomic) NSString *s; 
@end 

@implementation ClassA 
@synthesize s; 

-(void)method1 
{ 
    self.s = @"a"; 
    NSLog(@"%@", [NSString stringWithFormat:@"%@ - method1", self.s]); 
} 
@end 

ClassA + Category.h

:

निम्न कोड कोड है जो निजी संपत्ति में श्रेणी redeclared है

#import "ClassA.h" 

@interface ClassA(Category) 
-(void)method2; 
@end 

ClassA + Category.m

#import "ClassA+Category.h" 

// redeclare private property 
@interface ClassA() 
@property(nonatomic) NSString *s; 
@end 

@implementation ClassA(Category) 

-(void)method2 
{ 
    NSLog(@"%@", [NSString stringWithFormat:@"%@ - method2", self.s]); 
} 
@end 


है अच्छा तरीका निजी संपत्ति के लिए एक फ़ाइल (ClassA + Private.m) बना सकते हैं और ClassA.m और ClassA + Category.m से आयात करने के लिए है:

ClassA + Private.m इस को हल करने के

@interface ClassA() 
@property(nonatomic) NSString *s; 
@end 

उत्तर

10

सबसे अच्छा तरीका है ClassA+Private.h बना सकते हैं और ClassA.m और Category.m में आयात करने के लिए है। अंत में h पर ध्यान दें, आपको केवल अपनी निजी संपत्तियों और विधियों की घोषणा करने की आवश्यकता है, परिभाषा ClassA.m में बेहतर रखी गई है।

+3

मैं कहूंगा कि '.m' में केवल 'कक्षा + निजी.h' आयात करना बेहतर होगा। 'ClassA.h' में' ClassA + Private.h' को रखने से गुण उन वर्गों को दिखाई देते हैं जो 'ClassA.h' आयात करते हैं जो उद्देश्य को हरा देता है। –

+0

इसके अलावा, मुझे लगता है कि 'कक्षा ए + संरक्षित.h'' कक्षा + निजी.h' से अधिक सटीक होगा। –

+0

1 के साथ सहमत हुए और उत्तर संपादित किया। संरक्षित होने के नाते, मैं मानता हूं कि इससे आँखें खून बहती हैं लेकिन अन्य प्रोग्रामिंग भाषाओं से आने वाले लोगों के लिए यह शायद कोई फर्क नहीं पड़ता है, इसलिए मैंने अभी सवाल के लेखक द्वारा सुझाए गए नामकरण का उपयोग किया है। – lawicko

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