2012-04-05 7 views
6

मैं एक संपत्ति है कि मैं संश्लेषण नहीं है बजाय मैं एक गेटर बना सकते हैं और अपने आप को सेटर है,। इसलिए, एआरसी कीवर्ड (मजबूत या कमजोर) का कोई मतलब नहीं है, मुझे लगता है, इसलिए मैं उन्हें खत्म करता हूं। यह Xcode 4.3 पर ठीक काम करता है, लेकिन जब मेरे सहकर्मी XCode 4.2 पर उन्हें खोलता संकलक शिकायत कोई मजबूत/कमजोर कीवर्ड है कि वहाँ है, इसलिए मैं निर्देश दिए उसे meaninglessly फिर से वापस कीवर्ड दर्ज करने के लिए। कौन सा सही है (कीवर्ड के साथ या बिना)?क्या मुझे उन गुणों के लिए एआरसी कीवर्ड की आवश्यकता है जिन्हें मैं संश्लेषित नहीं करता हूं?

स्पष्ट है: मैं इस @property (nonatomic) NSString *foo की तरह एक संपत्ति है और .m फ़ाइल में मैं -(NSString *)foo और -(void)setFoo:(NSString *)foo को लागू करने और शामिल नहीं है @synthesize foo। एक और प्रासंगिक विवरण यह है कि कोई संबंधित iVar नहीं है, इसके बजाय गुण कोर डेटा ऑब्जेक्ट के साथ इंटरैक्ट करते हैं। यह XCode 4.2 में संकलित नहीं होगा जब तक कि मैं कीवर्ड में मजबूत या कमजोर नहीं जोड़ता।

संपादित करें मैंने एक और प्रासंगिक बात के बारे में सोचा, इनमें से एक गुण प्रोटोकॉल पर है, मुझे नहीं पता कि इससे कोई फर्क पड़ता है या नहीं।

उत्तर

1

घोषित विशेषताओं है कि आप संदर्भित कर रहे वैकल्पिक हैं।

संपत्ति घोषणा और कार्यान्वयन
@property निर्देश एक संपत्ति घोषित करती है: प्रलेखन के शब्दों में। एक वैकल्पिक संश्लेषित गुणों का सेट भंडारण अर्थशास्त्र और संपत्ति के अन्य व्यवहार के बारे में अतिरिक्त विवरण प्रदान करता है - संभावित मूल्यों के लिए "संपत्ति घोषणा गुण" देखें।

संपत्ति घोषणा गुण
आप प्रपत्र @property(attribute [, attribute2, ...]) का उपयोग करके विशेषताओं के साथ एक संपत्ति को सजाने कर सकते हैं। तरह के तरीकों, गुण उनके enclosing इंटरफ़ेस घोषणा के दायरे वाला कर रहे हैं। संपत्ति घोषणाओं के लिए जो परिवर्तनीय नामों की अल्पविराम-सीमित सूची का उपयोग करती हैं, संपत्ति विशेषताएं नामित गुणों पर लागू होती हैं।

आप @synthesize निर्देश का उपयोग करते हैं एक्सेसर तरीकों बनाने के लिए संकलक बताने के लिए ("संपत्ति कार्यान्वयन निर्देशों" देखें), कोड उत्पन्न विनिर्देश कीवर्ड द्वारा दिए गए मेल खाता है। आप अपने आप को एक्सेसर तरीकों लागू करते हैं तो , तो आप यह सुनिश्चित करना चाहिए कि यह विनिर्देश से मेल खाता है (उदाहरण के लिए, यदि आप कॉपी निर्दिष्ट आप सुनिश्चित करें कि आप सेटर विधि में इनपुट मूल्य कॉपी करते हैं चाहिए)।

आप तो @synthesize के बजाय @dynamic का उपयोग करते हैं यह संकलक कि आप अपने स्वयं के तरीकों लेखन किया जाएगा और यह जब यह उपयुक्त तरीकों नहीं मिल रहा है शिकायत करने से रोकता है कह रहा है।

अधिक जानकारी here पाया जा सकता है।

+0

दिलचस्प ... मैं एक गतिशील जोड़ने अगर यह XCode 4.2 – borrrden

+1

+1 पर काम करता है कोशिश करते हैं और देखेंगे, बहुत स्पष्ट जवाब – jmstone617

0

borrrden,

सबसे पहले, तुम क्यों अपनी संपत्ति बयान में अपनी स्मृति नीति छिपाना करने के लिए महत्वपूर्ण है? यह आपकी कक्षा के उपभोक्ताओं को नीति की घोषणा करता है। क्या आप उन्हें नहीं जानना चाहते हैं?

दूसरा, @synthesize एक nop नहीं है। यह वह तंत्र है जिसके द्वारा भाषा केवीओ का समर्थन करता है। जबकि आप अब इसका उपयोग नहीं कर रहे हैं, आप भविष्य के लिए इस उपयोग को क्यों रोक देंगे।

सच कहूं, @property में पूरा विवरण का उपयोग कर और न ही @synthesize का उपयोग नहीं करके, आप कर रहे हैं, IMO, समय से पहले अनुकूलन में उलझाने। आपका वर्तमान डिज़ाइन आपको संदेश प्रेषण नहीं बचाता है और यदि आवश्यक हो, तो इवर के निर्माण और टाइपिंग को प्रबंधित करने के लिए आपको मजबूर करता है। और आप भाषा की विशेषताओं को खो रहे हैं।

जब तक आप को प्राथमिकता दी Obj सी वी 2 + पैटर्न की सीमा से बाहर पाने के लिए एक अच्छा कारण है, और आप उन सूचीबद्ध नहीं किया है, तो मैं मानक पद्धति का उपयोग कर में लौट आएंगे। तब आपकी समस्या बस चली जाती है।

एंड्रयू

+0

वहाँ बहुत बार अच्छे कारणों के अपने स्वयं के तरीकों लिखने के लिए कर रहे हैं। (जैसे गणना गुण, सत्यापन, आदि) – lnafziger

+0

'@ संश्लेषण 'केवीओ के साथ कुछ भी नहीं है। आप कभी भी '@ संश्लेषण' लिखने के बिना केवीओ का उपयोग कर सकते हैं और अपने स्वयं के कस्टम सेटर्स और गेटर्स प्रदान करते समय। –

+0

यह अनुकूलन के बारे में नहीं है, यह तर्क के बारे में है। इन गुणों के लिए कोई iVars नहीं हैं गुण गुणों को सेट करके बदले में कोर डेटा ऑब्जेक्ट्स के साथ इंटरैक्ट करते हैं। इस मामले में क्या आप उन्हें मजबूत या कमजोर मानते हैं? शायद बाद की ऑब्जेक्ट प्रॉपर्टी के समान ही मैं सेटिंग कर रहा हूं। मुझे तब तक लिखना बुरा नहीं लगता जब तक कि मैं कोई साइड इफेक्ट नहीं कर रहा हूं। – borrrden

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

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