2012-05-18 18 views
7

निम्नलिखित कोड में, _test का उपयोग करना सुरक्षित है और उम्मीद है कि यह NO का एक वाउ है? या क्या मुझे इसे हमेशा - (id)init में स्पष्ट रूप से प्रारंभ करने की आवश्यकता है?/विधि चरों जो, अगर मैन्युअल रूप से प्रारंभ नहीं किया गया, जंक को इंगित करेंगे scopedउद्देश्य-सी में डिफ़ॉल्ट रूप से प्रारंभिक आवृत्ति चर प्रारंभिक हैं?

@implementation Test { 
    BOOL _test; 
} 

उत्तर

9

यह मान लेना कि सभी उदाहरण चर 0.

यह करने के लिए हालांकि प्रारंभ हो जाएगा स्थानीय स्तर के लिए मामला नहीं है सुरक्षित है।

भविष्य में संदर्भ के लिए, Rob Napier points out के रूप में, इस the documentation for + (id)alloc में पाया जा सकता:

नया उदाहरण के isa उदाहरण चर डेटा संरचना उस वर्ग का वर्णन करने के लिए आरंभ नहीं हो जाता; अन्य सभी इंस्टेंस चर के लिए स्मृति 0 पर सेट है।

+3

बस, संदर्भ प्रदान '+ alloc' के लिये दस्तावेज पढ़ने के लिए है। विशेष रूप से, 'आईएसए' को छोड़कर सभी ivars को 0 तक शुरू किया जाता है, लेकिन आपको वैसे भी 'आईएसए' के ​​साथ गड़बड़ नहीं करनी चाहिए। –

+1

ध्यान दें कि एआरसी के तहत संकलित किए जाने पर ऑटो ऑब्जेक्ट पॉइंटर्स _are_ वास्तव में 'शून्य' में प्रारंभ किया गया था। –

0

मैं इसे स्पष्ट रूप से शुरू करने के लिए उपयोग किया जाता हूं, मुख्य रूप से पता लगाने और पठनीयता की वजह से। लेकिन जब आप BOOL की परिभाषा को देखते हैं, तो आप देखेंगे कि NO#define से 0 के लिए कुछ और नहीं है। इसके कारण, मुझे लगता है कि आप सुरक्षित रूप से _testNO होने की उम्मीद कर सकते हैं।

बूलियन के बारे में एक बहुत अच्छी पोस्टिंग और उनके हैंडलिंग Objective-C : BOOL vs bool

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

  • कोई संबंधित समस्या नहीं^_^