2010-07-24 20 views
8

में डबल कोष्ठकों मैं नमूनों में और स्टब्स में इस तरह कोड का एक बहुत है कि XCode उत्पन्न करता है देखते हैं।नमूना कोड

उत्तर

7

@Anders टिप्पणी पर विस्तार करने के लिए, विशिष्ट मुद्दा इसके खिलाफ रक्षा है इस प्रकार है: समय इस बात का

if (foo = x) { do_something() }; 

90% एक बग है। आप foo == x कहना चाहते थे। लेकिन 10% समय, आप वास्तव में "फू को एक्स असाइन करें और फिर सत्य के लिए परीक्षण करें।" इसका कैननिकल केस while (ch = getchar()) है। लेकिन if (self = [super init]) एक और अच्छा उदाहरण है। संकलक मानता है कि ऐसी चीजें गलतियां होती हैं और चेतावनी फेंकती हैं जब तक आप संकलक को बताते हैं कि आप वास्तव में डबल ब्रांड्स का उपयोग करके इसका मतलब रखते हैं।

व्यक्तिगत रूप से, मैं सिर्फ यह इस तरह से कार्य करें:

self = [super init]; 
if (self != nil) 
{ 
    ... 
} 
return self; 

यह एक अतिरिक्त लाइन है, लेकिन यह सिर्फ इतना है कि छोटा सा साफ बातें रहती है जब init कॉल लंबा है।

एक तरफ, बिग नेर्ड रांच प्रसिद्धि के हारून हिलगैस ने हम में से कई को इस मामले में आने के लिए चुनौती दी जिसमें self==nil वास्तव में महत्वपूर्ण रूप से जांच की गई। मामले मौजूद हैं, लेकिन वे अविश्वसनीय रूप से कम हैं (आप self को NSObservation पर्यवेक्षक के रूप में जोड़ सकते हैं और आप उस मामले में nil नहीं बनना चाहेंगे)। इसे लायक के लिए ले लो; मेरे व्यक्तिगत कोड में मैं अक्सर nil चेक छोड़ देता हूं, लेकिन मेरे पेशेवर कोड में यह मेरी टीम के मानक का हिस्सा है।

किसी अन्य कारण से, ऐप्पल ने एक अतिरिक्त जीसीसी विकल्प -Wmost जोड़ा जो इस चेतावनी को बंद कर देता है। मुझे लगता है कि किसी को अतिरिक्त कोष्ठक टाइप करना पसंद नहीं आया। मुझे इसे बंद करने के लिए एक बुरा विचार लगता है।

2

बस चेतावनी प्राप्त करने से बचने के लिए।

+0

और शुक्रिया (आधुनिक) कंपाइलर्स चेतावनी जारी करते हैं। सशर्त रूप से सशर्त अभिव्यक्ति में असाइनमेंट बनाम समानता का उपयोग करके कई बग पेश किए जा सकते हैं - इन्हें अनदेखा नहीं किया जाना चाहिए। –

+0

हाँ, ओबीजेसी में जब कोई चेतावनी होती है तो यह वास्तव में कुछ गंभीर हो सकती है, इसलिए कुछ छोटे लोगों से छुटकारा पाने से बुराई को खोजना आसान हो जाता है। –

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