मुझे अपने उद्देश्य-सी कक्षाओं में से एक में False
के डिफ़ॉल्ट मान के साथ BOOL
प्रकार का एक उदाहरण चर बनाने की आवश्यकता है। मैं यह कैसे करु? मैंने लोगों को अपनी .h फ़ाइल में परिभाषित किया है, लेकिन मुझे वास्तव में सार्वजनिक होने के लिए इस चर की आवश्यकता नहीं है। इस प्रकार मैं इसे अपनी .m फ़ाइल में नहीं रखूंगा? इसके अतिरिक्त, क्या मुझे इसे संपत्ति बनाना चाहिए? या क्या मैंने कभी कुछ संपत्ति नहीं बनाई जानी चाहिए? धन्यवाद।मैं उद्देश्य सी में एक बूल इंस्टेंस चर कैसे बना सकता हूं?
उत्तर
मुझे अपने उद्देश्य सी कक्षाओं में से एक में FALSE के डिफ़ॉल्ट मान के साथ प्रकार BOOL का एक उदाहरण चर बनाने की आवश्यकता है। मैं यह कैसे करु?
@implementation MyClass { @private BOOL myBool; }
मैंने देखा है लोगों को अपने ज फ़ाइल में परिभाषित लेकिन मैं डॉन ':
मान लिया जाये कि आप वर्तमान Xcode उपयोग कर रहे हैं, तो आप इस तरह लागू करने में इवर घोषणा कर सकते हैं टी को वास्तव में सार्वजनिक होने के लिए इस चर की आवश्यकता नहीं है।
ऐतिहासिक रूप से, आपको कक्षाओं को लागू करने के तरीके के कारण @interface
में आवृत्ति चर घोषित करना पड़ा। यह अब केवल तभी जरूरी है जब आप 32 बिट ओएस एक्स को लक्षित कर रहे हों।
इसके अतिरिक्त, क्या मुझे इसे एक संपत्ति बनाना चाहिए?
यह निर्भर करता है। आपको निश्चित रूप से इसे एक संपत्ति बनाना चाहिए यदि यह आपकी कक्षा के बाहरी एपीआई (असंबद्ध वर्गों या उप-वर्गों के उपयोग के लिए है। यदि यह वस्तु के आंतरिक राज्य का केवल एक हिस्सा है, तो आपको इसे संपत्ति बनाने की आवश्यकता नहीं है (और मैं नहीं ' टी)।
या मैं कभी कुछ एक संपत्ति? धन्यवाद नहीं करना चाहिए।
आप एआरसी का उपयोग नहीं कर रहे हैं, तो और प्रकार एक वस्तु प्रकार है (BOOL नहीं है) आप हमेशा यह सुनिश्चित करना चाहिए संश्लेषित एक्सेसर्स के मेमोरी मैनेजमेंट का लाभ लेने के लिए एक संपत्ति। यदि आप एआरसी का उपयोग कर हैं, तो ऐप्पल डेवलपर सूची पर सलाह एपीआई गुणों का हिस्सा है जो सामान बनाना है और सामान जो आंतरिक राज्य है Ivars के रूप में।
ध्यान दें कि आंतरिक स्थिति के लिए भी आप केवीओ का उपयोग करना चाहेंगे, इस मामले में, एक संपत्ति का उपयोग करें।
यदि आप इस बूल को संपत्ति के रूप में घोषित करते हैं और इसे संश्लेषित करते हैं, तो आपको स्पष्ट रूप से ivar घोषित करने की आवश्यकता नहीं है। आप संपत्ति केवल वर्ग खुद को "दृश्यमान" बनाना चाहते हैं, एक वर्ग विस्तार
@interface MyClass()
@property (assign) BOOL myBool;
@end
@implementation MyClass
@synthesize myBool = myBool_; // creates an ivar myBool_ to back the property myBool.
@end
नोट का उपयोग है कि, हालांकि संकलक रन टाइम पर, ऊपर के लिए चेतावनी का उत्पादन करेगा, किसी भी वर्ग को भेज सकते हैं setMyBool:
या myBool
MyClass
की वस्तुओं के लिए।
यदि आप इसे एक संपत्ति बनाते हैं तो यह सार्वजनिक है। यदि आप नहीं चाहते हैं कि वेरिएबल सार्वजनिक हो, तो संपत्ति का उपयोग न करें। आप सार्वजनिक क्यों नहीं बनना चाहते हैं? आप एक निजी श्रेणी के माध्यम से केवल पढ़ने योग्य संपत्ति हो सकती है और आप में लिखने योग्य बना सकते हैं।
आप अपने मीटर फ़ाइल में रख यदि आप आईओएस 5
@implementation MyClass {
BOOL _myBool;
}
मुझे लगता है कि इस iOS5 के लिए नई है का उपयोग कर सकते हैं। लेकिन मैंने इस तरह कोड भी देखा है:
@implementation MyClass {
@private
BOOL _myBool;
}
आशा है कि इससे मदद मिलती है।
"यदि आप इसे एक संपत्ति बनाते हैं तो यह सार्वजनिक है।" दरअसल नहीं। किसी वर्ग एक्सटेंशन या श्रेणी में गुणों को निजी रूप से घोषित किया जा सकता है। – jlehr
लेकिन यदि आप कुछ नहीं करते हैं तो वे सार्वजनिक हैं। – Pfitz
यदि आप कुछ भी नहीं करते हैं, तो आपके पास कुछ भी नहीं है। यह निर्धारित करता है कि कोई विधि या संपत्ति सार्वजनिक है या नहीं, जहां इसे घोषित किया गया है। यदि इसे हेडर में घोषित किया गया है, तो यह सार्वजनिक रूप से दिखाई देता है; अन्यथा यह नहीं है। (यद्यपि कोई रनटाइम प्रवर्तन नहीं है।) – jlehr
BOOL के एक सरल BOOL myBool
साथ Ivars रूप में घोषित किया है, और @property (nonatomic, assign) BOOL myBool
के साथ एक संपत्ति के रूप में कर रहे हैं। हालांकि ध्यान दें, BOOLean मूल्य NO (शून्य) के लिए inititalized हैं। यदि आपको अन्य कक्षाओं से पहुंचने के लिए एक बूल की आवश्यकता है, या एम फाइल में "ग्लोबल" है, तो iVar या किसी प्रॉपर्टी का उपयोग करें, अन्यथा उन्हें एक व्यक्तिगत विधि में स्कोप्ड वर्र्स के रूप में घोषित करें।
यदि आप एक निजी चर बनाना चाहते हैं तो आप श्रेणियों की शक्ति का उपयोग कर सकते हैं। निम्न उपाय अपनाते हैं, उदाहरण के लिए और .m फ़ाइल में एक वर्ग MyClass करें:
#import "MyClass.h"
@interface MyClass() //This is an empty category on MyClass class
@property (nonatomic, assign) BOOL myBool;
@end
@implementation MyClass
@synthesize myBool = _myBool;
-(void)myMethod {
self.myBool = YES; //this is using the property
_myBool = NO; //this is the instance variable, as @synthesize creates an instance variable for you
// both are private
}
@end
आप .m
फ़ाइल में घोषणा कर सकते हैं।
चाहे आप इससे बाहर निकलें, चाहे आप जो चाहते हैं उस पर निर्भर करता है। एक संपत्ति के रूप में, आप बाद में सेटटर/गेटर लागू कर सकते हैं जिसमें चेकिंग/गार्ड/जो कुछ भी शामिल है। इसके अतिरिक्त, आप कुंजी-मूल्य-पहुंच लागू कर सकते हैं।
यदि आपको इनमें से किसी की आवश्यकता नहीं है, तो संपत्ति के लिए कोई वास्तविक आवश्यकता नहीं है (लेकिन एक अच्छी परंपरा: आप कभी नहीं जानते, आपका कोड कैसे विकसित होगा)।
मैं का उपयोग 0, 1 के बजाय हाँ, नहीं
#define YES 1
#define NO 0
- 1. मैं उद्देश्य-सी में प्राथमिकता विंडो कैसे बना सकता हूं?
- 2. उद्देश्य-सी: बूल बनाम बूल
- 3. उद्देश्य-सी शब्दकोश एक बूल
- 4. उद्देश्य-सी: बूल विधि
- 5. मैं सी # में एक संदेश बॉक्स कैसे बना सकता हूं?
- 6. मैं जावा में एक स्थिर स्थानीय चर कैसे बना सकता हूं?
- 7. मैं आर में डमी चर कैसे बना सकता हूं?
- 8. मैं उद्देश्य-सी/आईओएस में एक सटीक टाइमर घटना कैसे बना सकता हूं?
- 9. मैं उद्देश्य-सी में एक स्थिर विधि कैसे बना सकता हूं?
- 10. मैं एक उद्देश्य-सी विधि कैसे बना सकता हूं जो एक ब्लॉक
- 11. मैं वैश्विक चर के बिना डेटा कैसे बना सकता हूं?
- 12. सी # में जेनिक्स - मैं तर्क के साथ एक चर प्रकार का उदाहरण कैसे बना सकता हूं?
- 13. मैं पर्ल क्लास कैसे बना सकता हूं?
- 14. मैं एक constraintViolationException कैसे बना सकता हूं?
- 15. क्या मैं एक उद्देश्य-सी इंटरफ़ेस में 'प्रोटोकॉल' प्रकार का एक चर घोषित कर सकता हूं?
- 16. मैं एक शब्दकोश कैसे बना सकता हूं जिसमें सी #
- 17. उद्देश्य सी का उपयोग करके मैं एक ज़िप फ़ाइल कैसे बना सकता हूं?
- 18. मैं SQL में एक प्रतिस्थापन पैटर्न कैसे बना सकता हूं?
- 19. मैं उद्देश्य सी में CGFloats की सरणी कैसे बना सकता हूं?
- 20. मैं सी कोड में पर्ल हैश कैसे बना सकता हूं?
- 21. मैं सी में पाइथन कक्षा कैसे बना सकता हूं?
- 22. मैं सी # कोड में डेटा टेम्पलेट कैसे बना सकता हूं?
- 23. मैं WinForms एप्लिकेशन में एक पंक्ति कैसे बना सकता हूं?
- 24. मैं सीपीआई के माध्यम से एक पायथन कक्षा में स्थिर चर कैसे बना सकता हूं?
- 25. मैं सी # में पॉइंटर जेनेरिक कैसे बना सकता हूं?
- 26. क्या मैं आईओएस पर सी/उद्देश्य-सी में मेमोरी-मैप किए गए फ़ाइल * बना सकता हूं?
- 27. मेरे पास एक परिपत्र संदर्भ है। मैं उद्देश्य-सी में एक कमजोर संदर्भ कैसे बना सकता हूं?
- 28. मैं सी # में एक्सएमएल कैसे बना सकता हूं?
- 29. मैं मैन्युअल diff कैसे बना सकता हूं?
- 30. मैं ग्रोवी में वैश्विक चर कैसे बना सकता हूं और एक्सेस कर सकता हूं?
प्रयास करें: '- (शून्य) viewDidLoad { BOOL झंडा = नहीं; } '। एक बार जब आप इसे .m फ़ाइल में घोषित करना चाहते हैं तो आप संपत्ति को .m फ़ाइल से संश्लेषित नहीं कर सकते हैं। –
मुझे 'ध्वज' कहां परिभाषित करना चाहिए? क्या यह एमएम फाइल में समझ में नहीं आता है? हालांकि, मैं इसके लिए वाक्यविन्यास नहीं समझ सकता। Thx – Nosrettap
एमएम कक्षा में संपत्ति को परिभाषित करता है जैसा कि आप करते हैं। एच .. यह कक्षा से निजी को कक्षा से बाहर नहीं लाएगा जो बाहर से उपलब्ध नहीं है। – iphonic