साथ उदाहरण चर का उपयोग करना मैं में Obj सी और कोको कई वर्षों का अनुभव है, लेकिन अभी यह में वापस हो रही है और Obj सी की अग्रिम 2.0 आदिआधुनिक क्रम
मैं पाने के लिए कोशिश कर रहा हूँ आधुनिक रनटाइम और घोषित गुणों के आस-पास मेरा सिर इत्यादि। एक चीज जो मुझे थोड़ा उलझन देती है वह आधुनिक रनटाइम की क्षमता है जो iVars को पूरी तरह से बनाया गया है। और निश्चित रूप से इसका तात्पर्य है कि आपके कोड में आपको हमेशा मूल्य का उपयोग करने के लिए self.property का उपयोग करना चाहिए।
हालांकि, init * और dealloc (मान लीजिए कि आप जीसी का उपयोग नहीं कर रहे हैं) विधियों में हमें सीधे iVar (वर्तमान रनटाइम में) का उपयोग करना चाहिए।
तो प्रश्न हैं:
हम init * और आधुनिक रनटाइम साथ dealloc में संपत्ति accessors उपयोग करना चाहिए?
यदि ऐसा है तो, क्यों इस प्रकार भिन्न है? क्या यह सिर्फ इसलिए है क्योंकि संकलक iVar नहीं देख सकता है?
यदि मुझे किसी एक्सेसर को ओवरराइड करने की आवश्यकता है, तो क्या मैं अभी भी उस iVar तक पहुंच सकता हूं जिसे रनटाइम पर परिभाषित किया जाएगा या क्या मुझे एक वास्तविक iVar परिभाषित करना होगा कि रनटाइम तब उपयोग करेगा?
फिर, मैं संश्लेषित इवर का उपयोग कर सकते हैं, कारण है कि मैं init * और dealloc तरीकों के लिए यह करने के लिए जारी नहीं रह सकता?
मैं डॉक्स कई बार पढ़ा है, लेकिन वे इस सब के बारे में थोड़ा अस्पष्ट लग रहा था और मुझे यकीन है कि मैं इसे क्रम तय करने के लिए कि कैसे मैं कोडिंग जारी रखना चाहते हैं में अच्छी तरह से समझ होना चाहता हूँ।
आशा है कि मेरे प्रश्न स्पष्ट हैं।
परीक्षण के त्वरित सारांश:
आप विरासत में इवर घोषित नहीं करते, संकलक पूरी तरह से दुखी है
आप विरासत संकलक में इवर आसपास
#ifndef __OBJC2__
का उपयोग करते हैं खुश है और आप दोनों ivar को सीधे और संपत्ति के रूप में उपयोग कर सकते हैंइन आधुनिक क्रम, आप इवर तक पहुँचने के लिए सीधे बिना घोषणा इवर का संकलन
@private
घोषणा के दौरान त्रुटि देता है की कोशिश कर रहा इवर अपरिभाषित और संपत्तिआधुनिक क्रम में के रूप में उपयोग कर सकते छोड़ सकते हैं, जाहिर है, के लिए सीधी पहुँच की अनुमति देता है ivar, विरासत और आधुनिक दोनों
वास्तव में आगे जाने के लिए एक साफ तरीका नहीं देता है?
जो लोग भ्रमित हो सकता है के लिए स्पष्ट करने के लिए, "आधुनिक रनटाइम" नए ऑब्जेक्टिव-सी क्रम को संदर्भित करता है कि हो सकता है * केवल * आईफोन ऐप्स और 64-बिट प्रक्रियाओं द्वारा 10.5 या उच्चतर पर उपयोग किया जाना चाहिए। कोई भी उद्देश्य-सी कोड जो 32-बिट या टाइगर या पहले "लीगेसी रनटाइम" के तहत चलता है। –
http://developer.apple.com/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtVersionsPlatforms.html –
@Quinn - मुझे नहीं पता था कि आईफोन ओएस आधुनिक रनटाइम का उपयोग करता है। वह बहुत प्यारा है। –