2008-11-25 12 views
8

जब एक उदाहरण है कि मौजूद हैं या नहीं कर सकता है जारी, मैं आमतौर पर यह लिख:एक रिलीज संदेश अच्छा अभ्यास भेजने से पहले शून्य नहीं है तो जांच रहा है?

अगर (वस्तु = शून्य!) [वस्तु रिहाई];

लेकिन जब से कोई संदेश भेजने में कोई समस्या नहीं है, तो क्या यह सशर्त आवश्यक है?

मुझे लगता है कि सवाल इस पर आता है: जो किसी ऑब्जेक्ट की तुलना में अधिक ऑब्जेक्ट का उपयोग करता है, या एक संदेश भेजता है?

उत्तर

14

this page देखें जो बताता है कि पास करने वाले संदेशों को शून्य (आपके उदाहरण को सामान्यीकृत करने के लिए) पूरी तरह से ठीक है।

अधिक ओवरहेड के रूप में, किसी भी प्रदर्शन प्रभाव प्रणाली के समग्र प्रदर्शन (समयपूर्व अनुकूलन की आदत में न आएं) के लिए नगण्य होगा।

+1

संदेश भेजना नील चेक को किसी भी तरह से करेगा, इसलिए अलग-अलग शून्य जांच करना अनुकूलन नहीं है। यह एक विरोधी अनुकूलन है। – StilesCrisis

2

यह जांच आवश्यक नहीं है। जब तक आप इस कोड के बहुत सारे पुनरावृत्तियों (10,000, शायद अधिक) कर रहे हैं, तो समय अंतर भिन्न नहीं है।

+1

और फिर भी, आपको किसी भी अनुकूलन करने से पहले एक प्रोफाइलर का उपयोग करना चाहिए। – Pablo

5

जब मैं ओब्जे-सी की तुलना में अधिक सी ++ कोडिंग कर रहा था, तो मैं हमेशा nil की जांच के लिए कोड लिखता था - क्योंकि यह मेरे लिए एक नोट था कि इस सूचक को nil होने की अनुमति है। अब, मैंने objc_msgSend इसके साथ सौदा किया है, क्योंकि मैंने इस धारणा के साथ कोड को पढ़ने में अधिक सहजता प्राप्त की है कि कोई भी सूचक वैध रूप से nil हो सकता है।

एक "सुरक्षित कोडिंग" स्तर पर, मुझे लगता है कि यह अधिक महत्वपूर्ण है हमेशा एक रिलीज (संभवतः dealloc विधि में एक release exluding) के बाद nil करने के लिए अपने संकेत सेट करने के लिए। इस तरह, आप सुनिश्चित करते हैं कि आपका सूचक कभी अमान्य नहीं है (यह या तो वैध है, या nil)।

2

Obj-C nil के लिए चेक करता है, इसलिए इसे दो बार करने की आवश्यकता नहीं है।

[object release]; object = nil; 

तुम वहाँ कुछ अतिरिक्त कोड जोड़ने चाहते हैं, यह सूचक nil को बाद में स्थापित करने के लिए काफी बेहतर है, इसलिए दोबारा मुक्त करने के लिए प्रतिरक्षा होगा।

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