मैं एक ऐसी संपत्ति बनाने की कोशिश कर रहा था जो केवल पढ़ने योग्य है। मैं इस वर्ग के उदाहरण बनाने वाले वर्ग से मूल्य के साथ आरंभ करना चाहता था, उदा।एक पठनीय संपत्ति को शुरू करना
@property (retain,readonly) NSString *firstName;
और मैं इस तरह यह प्रारंभ करने की कोशिश की:
-(id)initWithName:(NSString *)n{ self.firstName = n; }
एक बार मैं ऐसा किया, संकलक कि केवल पढ़ने के लिए संपत्ति नहीं सौंपा जा सकता है एक त्रुटि की सूचना दी। तो मैं यह कैसे कर सकता हूँ?
firstName = [n retain]; //Or copy
यह आम तौर पर वैसे भी किसी भी init और dealloc तरीकों में setters बायपास करने के लिए सलाह दी जाती है:
मेरे उपरोक्त कार्यान्वयन के साथ समस्या यह है कि मूल्य को बनाए रखा नहीं जाता है। एक बार जब मैं संपत्ति में रखता हूं, तो क्या यह असाइनमेंट संपत्ति में मूल्य निर्धारित करेगा। और यदि कोई अन्य वस्तु इस संपत्ति तक पहुंचती है तो यह मूल्य वहां होगा। मैंने अपने प्रश्न – awsome
को भी संशोधित किया है यह समस्या क्यों होगी? 'Firstname = [n retain]' का उपयोग करके 'पहले' नाम को 'n' पर पॉइंटर बना देगा। तो हाँ, जब कोई अन्य वस्तु इस संपत्ति तक पहुंच जाती है, तो मूल्य वहां होगा। :) – Rengers
अगर मैं इस संपत्ति को एक्सेस करने का प्रयास करता हूं, तो मुझे निम्न अपवाद मिल रहा है। प्रोग्राम को सिग्नल प्राप्त हुआ: "EXC_BAD_ACCESS"। और यह त्रुटि किसी अन्य संपत्ति के कारण नहीं है। मैंने डीबगर में बहुत कुछ की जांच की। यह संपत्ति "दायरे से बाहर" दिखाती है। और अगर मैं इसे
self.firstName = n;
के साथ असाइन करता हूं। तो सब कुछ ठीक काम करता है। – awsome