2012-02-27 10 views
12

मैं एक आवृत्ति चर बनाने के बिना एक संपत्ति जोड़ने की कोशिश कर रहा हूँ। क्या इसे करना संभव है? या आप ऐसा कुछ ऐसा कर सकते हैं जो संपत्ति नहीं है?उदाहरण के बिना एक संपत्ति जोड़ें?

उदाहरण:

@interface RandomClass() 
@property (nonatomic) int value; 
@end 

@implementation RandomClass 
@synthesize value = _value; 
// Here I override the default methods @synthesize 
-(int)value 
{ 
     return 8; // Actually I'm returning something more complex, so a "define" won't work 
} 
-(void)setValue:(int)value 
{ 
    self.someOtherValue = value; 
} 

उपरोक्त कोड में, मैं उदाहरण चर _value का उपयोग नहीं कर रहा हूँ! चर बनाने के बिना ऐसा करने का कोई तरीका है? आप गेटर लागू कर रहे हैं के बाद से

उत्तर

8

लाइन

@synthesize value = _value; 

निकालें, अपने आप को सेटर/@synthesize उपयोगी नहीं है।


@synthesize दो नौकरियों की सेवा करता है। पहला काम संपत्ति को बैकिंग इवर से जोड़ना है, अगर यह पहले से मौजूद नहीं है तो इवर को संश्लेषित करना। दूसरा काम गेटर/सेटर को संश्लेषित करना है। यदि आपको बैकिंग इवर की आवश्यकता नहीं है, और यदि आप गेटर/सेटर के लिए कार्यान्वयन प्रदान कर रहे हैं, तो आपको @synthesize की आवश्यकता नहीं है।

+0

यदि आप एक संपत्ति घोषित करने जा रहे हैं, भले ही इसे घोषित ivar द्वारा समर्थित किया गया हो या नहीं, तो आपके पास इसके लिए '@ संश्लेषण 'या' गतिशील 'घोषणा होनी चाहिए। ओपी में शायद 'गतिशील' घोषणा हो। और उस मामले में, और कोड में उनकी टिप्पणियां क्या कहती हैं, उन्हें शायद घोषित इवर की आवश्यकता नहीं है। – kamprath

+0

यही वह है जिसे मैं ढूंढ रहा था! बहुत बहुत धन्यवाद! – tomidelucca

+5

@claireware: इसके विपरीत, यदि संकलक देख सकता है कि विधियां लागू की गई हैं, तो 'गतिशील' की कोई आवश्यकता नहीं है। ["संपत्ति कार्यान्वयन निर्देश" देखें] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW9): विशिष्ट संकलक क्रियाओं को ट्रिगर करने के लिए आप '@ कार्यान्वयन' ब्लॉक में' @ सिंथेसाइज 'और '@ गतिशील' निर्देशों का उपयोग कर सकते हैं। ध्यान दें कि किसी दिए गए '@ संपत्ति 'घोषणा के लिए न तो आवश्यक है।

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