जवाबों:
nilकेवल एक के स्थान पर उपयोग किया जाना चाहिए id, जिसे हम जावा और सी ++ प्रोग्रामर एक वस्तु के लिए एक संकेतक के रूप में सोचेंगे। NULLगैर-ऑब्जेक्ट पॉइंटर्स के लिए उपयोग करें ।
उस विधि की घोषणा को देखो:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
संदर्भ एक void *(यानी सी-शैली सूचक) है, इसलिए आप निश्चित रूप से उपयोग करेंगे NULL(जो कि कभी-कभी के रूप में घोषित किया जाता है (void *)0) nil(जो कि प्रकार का है id)।
contextमें observeValueForKeyPath:ofObject:change:context:है void *, यह नहीं है कि मतलब डेटा के रूप में पारित कर दिया है कि contextएक वस्तु सूचक हो सकता है? मुझे लगता है कि एक सामान्य मामला होगा। इसीलिए मैं उलझन में हूं कि डॉक्स हमेशा के NULLबजाय क्यों इस्तेमाल करते हैं nil।
वे तकनीकी रूप से एक ही चीज़ (0) हैं, लेकिन nil आमतौर पर एक ऑब्जेक्टिव-सी ऑब्जेक्ट प्रकार के लिए उपयोग किया जाता है, जबकि NULL का उपयोग सी-स्टाइल पॉइंटर्स (शून्य *) के लिए किया जाता है।
NULLअलग से परिभाषित किया गया है nil। nilके रूप में परिभाषित किया गया है (id)0। NULLनहीं है।
वे तकनीकी रूप से एक ही चीज़ हैं और केवल शैली में भिन्न हैं:
nilहै कि idटाइप (और पॉइंटर्स टू ऑब्जेक्ट्स) के लिए क्या उपयोग करना है ।NULLहै कि आप के लिए उपयोग क्या है void *।0।मैं आमतौर पर उस प्रकार का उपयोग करता हूं जो उस भाषा से मेल खाता है जहां प्रकार घोषित किया गया है ।
NULLहै C equivalentकी nil, कुछ भी करने के लिए एक सूचक;
कहाँ nil is zero typed as id,
NULL is zero typed as void*।
एक महत्वपूर्ण बिंदु आप NULL को संदेश नहीं भेज सकते हैं। इसलिए कई स्थानों पर उद्देश्य-सी में नील का उपयोग करना पसंद किया जाता है।
वे लगभग एक ही चीज को छोड़कर,
nilएक उद्देश्य-सी शैली में प्रयोग किया जाता है। NULLC प्रकार के पॉइंटर्स के लिए कहां है और इसके लिए typdef'ed है (void *)।