मैं इसे कुछ वर्षों से धार्मिक रूप से कर रहा हूं। [super init...]
तरीकों बुला के बाद self
की वैधता की जांच कर रहा:हम सभी इनिट तरीकों में अगर (स्वयं) की जांच क्यों करते हैं?
self = [super init];
if (self != nil) {
// initialize
}
return self;
आप के रूप में अच्छी तरह से this question का सार विभिन्न तरीकों से में यह कर सकते हैं, लेकिन इस सवाल का सिंटैक्स के बारे में है, मेरा अवधारणा के बारे में है।
मुझे हाल ही में एक सहयोगी से एक प्रश्न मिला है जो उद्देश्य-सी सीख रहा है और उसने मुझसे पूछा, "मुझे स्वयं के अस्तित्व के लिए परीक्षण क्यों करना चाहिए, क्या यह स्पष्ट नहीं है कि यह वहां है?" और मेरा संक्षिप्त जवाब "गलती, हाँ, अच्छी तरह से ऐसे उदाहरण हैं जहां यह असफल हो सकता है, इसलिए यही कारण है।" लेकिन लंबा जवाब यह है कि मैं वास्तव में खुद को समझ नहीं पा रहा हूं कि हम हर जगह इसके लिए क्यों परीक्षण करते हैं, जब ऐसे मामलों में जहां यह असफल हो सकता है, वे बहुत दुर्लभ हैं। Apple's reference guide हमें कुछ विशिष्ट मामलों के बारे में बताता है, जैसे फाइलों के साथ प्रारंभ करना या सिंगलेट्स से निपटने के दौरान। लेकिन ये ध्वनि नियम के बहुत दुर्लभ अपवादों की तरह है कि [super init]
एस सिर्फ काम करना चाहिए।
तो मेरा प्रश्न यह है कि: हम हमेशा स्वयं की वैधता का परीक्षण क्यों करते हैं? क्या हम इसे हर जगह कार्यान्वित कर रहे हैं ताकि वह उस अपवाद को पकड़ सके जहां यह होता है? क्यों न केवल पूरे if (self)
चीज को छोड़ दें और हमारी वस्तु को आरंभ करें यदि सफल होने की संभावना 100% है (या यह कभी भी मामला नहीं है)?
पीएस मुझे एहसास है कि यह सवाल एक डुप्ली होना चाहिए क्योंकि यह बहुत बुनियादी है, लेकिन मेरे खोज प्रश्नों को प्रारंभिक वाक्यविन्यास के बारे में बहुत सारे प्रश्न हैं। डुप्लिक लिंक की सराहना की जाती है, चीयर्स!
संभावित डुप्लिकेट [उद्देश्य-सी में मुझे क्यों जांचना चाहिए कि स्वयं = \ [सुपर init \] शून्य नहीं है?] (Http://stackoverflow.com/questions/1287950/in-objective-c-why- चाहिए-i-check-if-self-super-init-is-not-nil) – JeremyP