से निजी संपत्ति का उपयोग कैसे करें मैं अपनी श्रेणी से कक्षा की निजी संपत्ति तक पहुंच बनाना चाहता हूं।, श्रेणी
लेकिन निजी संपत्ति तक पहुंचने के लिए, मुझे श्रेणी में एक ही निजी संपत्ति को फिर से शुरू करना होगा।
यदि मैं पुनर्विक्रय नहीं करता हूं, तो मुझे एक संकलन त्रुटि मिलती है, 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
मैं कहूंगा कि '.m' में केवल 'कक्षा + निजी.h' आयात करना बेहतर होगा। 'ClassA.h' में' ClassA + Private.h' को रखने से गुण उन वर्गों को दिखाई देते हैं जो 'ClassA.h' आयात करते हैं जो उद्देश्य को हरा देता है। –
इसके अलावा, मुझे लगता है कि 'कक्षा ए + संरक्षित.h'' कक्षा + निजी.h' से अधिक सटीक होगा। –
1 के साथ सहमत हुए और उत्तर संपादित किया। संरक्षित होने के नाते, मैं मानता हूं कि इससे आँखें खून बहती हैं लेकिन अन्य प्रोग्रामिंग भाषाओं से आने वाले लोगों के लिए यह शायद कोई फर्क नहीं पड़ता है, इसलिए मैंने अभी सवाल के लेखक द्वारा सुझाए गए नामकरण का उपयोग किया है। – lawicko