जवाबों:
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
एक उद्देश्य-सी शैली में प्रयोग किया जाता है। NULL
C प्रकार के पॉइंटर्स के लिए कहां है और इसके लिए typdef'ed है (void *)
।