BOOL का डिफ़ॉल्ट मान


जवाबों:


175

नहीं है कोई डिफ़ॉल्ट मान यदि आप लिखना

-(void)somemethod {
  BOOL x;  // <--- no default value

यह कचरा के लिए आरंभिक है।

हालाँकि, एक BOOL आइवर के लिए , इसे इनिशियलाइज़ किया जाएगा NO, क्योंकि पूरा उदाहरण इनिशियलाइज़ेशन पर 0 से भरा होता है।

(ध्यान दें: जब ARC सक्षम होता है, तो स्थानीय ऑब्जेक्ट पॉइंटर्स का हमेशा डिफ़ॉल्ट मान होगा nil, लेकिन BOOL जैसे गैर-ऑब्जेक्ट प्रकारों के स्थानीय चर अभी भी कचरा के लिए आरंभिक होते हैं। स्थानीय वेरिएबल्स को शून्य पर सेट करें? (उद्देश्य-सी)


1
क्या आप हमेशा एक ही कचरा होने के लिए गैर ivar BOOL पर भरोसा कर सकते हैं? या यह अलग है? (यानी, मैं इसे एक NSlog स्टेटमेंट में '2' के पूर्णांक मान का मूल्यांकन कर रहा हूँ)
bentford

8
@ बेंटफोर्ड: नहीं, तुम नहीं कर सकते।
kennytm

@ बेंटफोर्ड आइवर को NOऊपर वर्णित के अनुसार आरंभीकृत किया गया है। मुझे लगता है कि आपका मतलब है var।
रफी खाचदौरेन

1
तुच्छ लगता है, लेकिन यह जानना बहुत महत्वपूर्ण है! धन्यवाद!!
खरबों

1
@ केनीटीएम "गैर-वस्तु प्रकार जैसे बीओओएल के साथ एआरसी सक्षम अभी भी कचरा के लिए आरंभीकृत किया जाएगा"। क्या अापको उस बारे में पूर्ण विशवास है? आपके द्वारा प्रदान किया गया लिंक कहता है "ऑब्जेक्ट-सी ऑब्जेक्ट्स के इंस्टेंस वेरिएबल्स हमेशा 0 (या nil) पर सेट होते हैं जब आप एक ऑब्जेक्ट आवंटित करते हैं" और मुझे कोई अन्य, स्पष्ट, संदर्भ नहीं मिल सकता है, इसलिए यह सब मेरे लिए थोड़ा विरोधाभासी है।
क्रिस्टोफ वान लैंडस्कूट

24

मैंने Xcode 5.1, OS X Mavericks 10.9.4 का उपयोग करके अपने खुद के कुछ प्रयोग किए। उन लोगों के लिए जो ALog नहीं जानते हैं, एक संशोधित NSLog है। वैसे भी, पहला प्रयोग isLandscapeसार्वजनिक चर के रूप में उपयोग करना था , @synthesizeअभिभावक दृश्य नियंत्रक (नीचे प्रदर्शित) द्वारा पहुँचा जा सकता है। दूसरे प्रयोग का उपयोग नहीं किया गया था @synthesizeऔर मैं, जाहिर है, self.isLandscapeकंसोल में एक ही परिणाम प्राप्त करने के लिए उपयोग किया गया था। कंसोल आउटपुट मेरे कोड के नीचे है। एक विधि के अंदर एक स्थानीय चर के रूप में 'लैन्डस्केप' का प्रयोग किया गया तीसरा प्रयोग।

@interface MyClass : UIView // (subclass used in my UIViewController)

@property (nonatomic) BOOL isLandscape;  // < - - - testing this BOOL


@implementation MyClass

@synthesize isLandscape;

- (void)awakeFromNib
{
    [super awakeFromNib];
    // Test for YES or NO
    if (isLandscape == YES) {
        ALog(@"isLandscape == YES");
    } else if (isLandscape == NO) {
        ALog(@"isLandscape == NO");
    } else {
        ALog(@"isLandscape != YES/NO");
    }
    // Test for nil or non-nil
    if (isLandscape) {
        ALog(@"isLandscape");
    } else if (!isLandscape) {
        ALog(@"!isLandscape");
    } else {
        ALog(@"!= nil/non-nil");
    }
    // Test its value
    ALog(@"isLandscape == %d", isLandscape);
}

ये परिणाम पहले दो प्रयोगों से हैं ...

2014-08-28 08:18:52.909 MyApp[493:60b] -[MyClass awakeFromNib] [Line 157] isLandscape == NO
2014-08-28 08:18:52.911 MyApp[493:60b] -[MyClass awakeFromNib] [Line 166] !isLandscape
2014-08-28 08:18:52.912 MyApp[493:60b] -[MyClass awakeFromNib] [Line 172] isLandscape == 0

THIRD EXPERIMENT में 'isLandscape' अब एक संपत्ति नहीं थी। मैंने इसे दिलचस्प परिणामों के साथ एक स्थानीय चर होने के लिए सेट किया है:

- (void)awakeFromNib
{
    [super awakeFromNib];
    BOOL isLandscape; // < - - - testing this BOOL
    // Test for YES or NO
    if (isLandscape == YES) {
        ALog(@"isLandscape == YES");
    } else if (isLandscape == NO) {
        ALog(@"isLandscape == NO");
    } else {
        ALog(@"isLandscape != YES/NO");
    }
    // Test for nil or non-nil
    if (isLandscape) {
        ALog(@"isLandscape");
    } else if (!isLandscape) {
        ALog(@"!isLandscape");
    } else {
        ALog(@"!= nil/non-nil");
    }
    // Test its value
    ALog(@"isLandscape == %d", isLandscape);
}

ये परिणाम तीसरे प्रयोग से…

2014-08-28 08:28:33.483 MyApp[581:60b] -[MyClass awakeFromNib] [Line 159] isLandscape != YES/NO
2014-08-28 08:28:33.486 MyApp[581:60b] -[MyClass awakeFromNib] [Line 164] isLandscape
2014-08-28 08:28:33.487 MyApp[581:60b] -[MyClass awakeFromNib] [Line 172] isLandscape == -24

मैं अनुमान लगा रहा हूं कि गुण मेरे या एक्सकोड द्वारा स्वचालित रूप से आरंभ हो जाते हैं, लेकिन स्थानीय चर को कोई मूल्य नहीं मिलता है। फिर भी, [लाइन 164] पर स्थानीय चर YES या NO नहीं है, लेकिन यह गैर-शून्य है? मुझे लगता है कि यह (यादृच्छिक) कचरा मूल्य है जिस पर आप भरोसा नहीं कर सकते। मुझे उम्मीद है कि इससे अगले व्यक्ति को मदद मिलेगी। मैंने कुछ सीखा लेकिन मैं टिप्पणियों के लिए तत्पर हूं। धन्यवाद और शुभकामनाएँ!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.