2010-03-28 16 views
10

एक अंतरफलक में इस जैसे:क्या उद्देश्य-सी इंटरफ़ेस सदस्य डेटा की शुरुआत की गारंटी देता है?

@interface MyClass : NSObject 
{ 
    bool PlainOldBool; 
} 

@end 

... PlainOldBool गलत पर स्वत: प्रारंभ हो जाता है, या यह कि ऐसा करने के लिए स्पष्ट रूप से एक init विधि का उपयोग करने के लिए आवश्यक है?

उत्तर

23

हां (unless your false is not 0)। डिफ़ॉल्ट +alloc/+allocWithZone: विधि स्वचालित रूप से सभी ivars को शून्य कर देगा।

से https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW17

  • यह शून्य करने के लिए अन्य सभी उदाहरण चर initializes (या शून्य के लिए समान प्रकार, इस तरह के nil, NULL, और 0.0 के रूप में)। उनके कंस्ट्रक्टर्स डिफ़ॉल्ट रूप से कहा जाता है नहीं कर रहे हैं:
+0

उत्कृष्ट! और लिंक के लिए धन्यवाद। – Stabledog

+0

आप इस पृष्ठ पर + alloc विधि में मौजूद लिंक को अपडेट करना चाहते हैं: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference .html – Reuben

+0

@ रेबेन: धन्यवाद। एक कामकाजी लिंक में अपडेट किया गया। – kennytm

4

भी ध्यान देने योग्य है कि आप ऑब्जेक्टिव-सी ++ कर रहे हैं, सी ++ वस्तुओं है कि ऑब्जेक्टिव-सी वस्तुओं के ivars नहीं initalized कर रहे हैं।

+0

ओह, यह जानना बहुत महत्वपूर्ण है! तो आप प्लेसमेंट नए() ऑपरेटरों का एक गुच्छा क्या करते हैं? – Stabledog

+0

वास्तव में मैं गलत था: डिफ़ॉल्ट रूप से, रचनाकारों को बुलाया जाता है। इसे नियंत्रित करने के लिए एक बिल्ड सेटिंग है, यह objc-call-cxx-cdtors है। यदि आप इसे चेक करते हैं, तो "डिफ़ॉल्ट" ctors (उदा। बिना तर्क वाले वाले) को कॉल किया जाएगा। जीसीसी पुस्तिका पर अधिक जानकारी: http://gcc.gnu.org/onlinedocs/gcc/Objective_002dC-and-Objective_002dC_002b_002b-Dialect-Options.html (या आप संकेत का उपयोग करें और नए फोन (कर सकते हैं) मैन्युअल) –

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