Xcode 6.3 के साथ, उद्देश्य-सी में एपीआई के इरादे को बेहतर ढंग से व्यक्त करने के लिए (और बेहतर स्विफ्ट समर्थन सुनिश्चित करने के लिए) नए एनोटेशन पेश किए गए थे । वे एनोटेशन बेशक थे nonnull
, nullable
और null_unspecified
।
लेकिन Xcode 7 के साथ, ऐसी कई चेतावनी दिखाई दे रही हैं जैसे:
सूचक एक अशक्तता प्रकार विनिर्देशक (_Nonnull, _Nullable या _Null_unspecified) को याद कर रहा है।
इसके अलावा, Apple अपने C कोड ( स्रोत ) को चिह्नित करते हुए एक अन्य प्रकार की अशक्तता निर्दिष्ट करता है।
CFArrayRef __nonnull CFArrayCreate(
CFAllocatorRef __nullable allocator, const void * __nonnull * __nullable values, CFIndex numValues, const CFArrayCallBacks * __nullable callBacks);
इस प्रकार, अब, हमारे पास ये 3 अलग-अलग अशक्तताएं हैं:
nonnull
,nullable
,null_unspecified
_Nonnull
,_Nullable
,_Null_unspecified
__nonnull
,__nullable
,__null_unspecified
भले ही मुझे पता है कि क्यों और कहां किस एनोटेशन का उपयोग करना है, मैं थोड़ा भ्रमित हो रहा हूं कि मुझे किस प्रकार के एनोटेशन का उपयोग करना चाहिए, कहां और क्यों। यह वही है जो मैं इकट्ठा कर सकता था:
- गुण का उपयोग करना चाहिए के लिए
nonnull
,nullable
,null_unspecified
। - मैं का उपयोग करना चाहिए विधि पैरामीटर के लिए
nonnull
,nullable
,null_unspecified
। - सी तरीकों का उपयोग करना चाहिए के लिए
__nonnull
,__nullable
,__null_unspecified
। - ऐसे दोहरे संकेत का उपयोग करना चाहिए अन्य मामलों के लिए
_Nonnull
,_Nullable
,_Null_unspecified
।
लेकिन मैं अभी भी उलझन में हूं कि हमारे पास इतने सारे एनोटेशन क्यों हैं जो मूल रूप से एक ही काम करते हैं।
तो मेरा सवाल है:
उन एनोटेशन के बीच सटीक अंतर क्या है, उन्हें सही तरीके से कैसे और क्यों रखा जाए?