मुझे अनुमान है कि मैं केवल UIKIT_EXTERN का उपयोग करूंगा यदि मेरे प्रोजेक्ट में सी ++ कोड का मौका है जो चर का उपयोग कर सकता है।
दाएं। यह प्राथमिक कारण है। ऐसा इसलिए होता है क्योंकि सी और सी ++ प्रतीक विभिन्न नामकरण सम्मेलनों का उपयोग करते हैं।
कम आम कारण है: UIKIT_EXTERN
डिफ़ॉल्ट दृश्यता भी निर्दिष्ट करता है।
नोट: extern
के बाद से "प्रतीक" - "चर" नहीं है क्योंकि स्थिरांक, कार्य, और cetera पर भी लागू किया जा सकता है।
यदि ऐसा है तो क्या यह UIKIT_EXTERN के साथ आपके सभी मौजूदा उपलब्ध स्थिरांक घोषित करने के लिए सुरक्षित नहीं होगा?
लघु उत्तर: यह अच्छा अभ्यास हो जाएगा (पढ़ें: 'सुरक्षित') इस फार्म का उपयोग करने के लिए है, लेकिन यह आम तौर पर अपने पुस्तकालय के लिए सबसे अच्छा UIKIT_EXTERN
के अपने स्वयं के बराबर घोषित करने के लिए है।
UIKIT_EXTERN
एक UIKit घोषणा है। पुस्तकालयों को इस घोषणा पर निर्भर नहीं होना चाहिए, और बस अपना स्वयं का समानार्थी शब्द परिभाषित करना चाहिए - और कई लोग करते हैं, लेकिन मुझे लगता है कि यह सी और सी ++ में अधिक आम है क्योंकि ये प्रोग्राम अक्सर अधिक प्लेटफ़ॉर्म लक्षित करते हैं और आईओएस प्रोग्राम का एक अच्छा प्रतिशत विकसित नहीं होता है अन्य प्लेटफार्मों का समर्थन करने के लिए। अन्यथा, उद्देश्य-सी प्रोग्राम जिन्हें UIKit की आवश्यकता नहीं है, इस घोषणा के कारण UIKit पर निर्भर हो सकते हैं, इसलिए उन्हें UIKit आयात करना होगा (ताकि UIKIT_EXTERN
की घोषणा दिखाई दे)।
इसके अलावा, UIKit उन सभी प्लेटफॉर्म पर उपलब्ध नहीं है जहां आईओएस प्रोग्राम चलाए जा सकते हैं (यानी यह सी, सी ++ हो सकता है, या फाउंडेशन पर निर्भर करता है और ओएस एक्स को पोर्टेबल)। तो अगर किसी ने (उत्सुकता से) अपने आप को घोषित करने का आग्रह किया तो एक बुरा विचार था, CF_EXPORT
(कोरफाउंडेशन के समकक्ष) का चयन करना एक और पोर्टेबल विकल्प होगा क्योंकि इसका उपयोग सी, सी ++ और ओएस एक्स पर भी किया जा सकता है। इसके अलावा, आपकी लाइब्रेरी केवल CoreFoundation (न्यूनतम पर) शामिल करने की आवश्यकता है।
यदि आपकी लाइब्रेरी UIKit पर निर्भर करती है और ढांचे को आपकी लाइब्रेरी द्वारा आयात किया जाना चाहिए, तो यह बेहद असंभव है कि उनके समानार्थी शब्द का उपयोग करने से आपकी लाइब्रेरी में समस्या हो सकती है।
लेकिन यह स्थितियों का एक बहुत बड़ा सेट है - आपकी लाइब्रेरी के लिए यह केवल घोषित करना बहुत आसान है। संक्षेप में, एक अच्छी तरह लिखित और पोर्टेबल पुस्तकालय (लगभग) कभी भी 'कच्चे' extern
का उपयोग नहीं करना चाहिए, न ही अनावश्यक लाइब्रेरी निर्भरता एक अच्छी बात होनी चाहिए (इस मामले में UIKit)। इस तरह के UIView
उपवर्गों का एक संग्रह के रूप में -
यह एक बुरा डिजाइन पसंद UIKIT_EXTERN
जब तक अपने पुस्तकालय UIKit से अविभाज्य थे उपयोग करने के लिए किया जाएगा।
यदि आपकी लाइब्रेरी सिर्फ फाउंडेशन प्रकारों से संबंधित है, तो UIKit आयात करने का अर्थ है कि आपकी लाइब्रेरी ओएस एक्स पर अनुपयोगी होगी (जब तक कि UIKit आयात हटाया नहीं जाता है)।
जिन लोगों को सी ++ का उपयोग सी (+ सुपरसेट्स समेत) का अधिक अनुभव नहीं है, वे नहीं जानते कि प्रतीक नाम अलग हैं, इसलिए वे सीधे extern
का उपयोग कर सकते हैं। अंत में, कुछ कार्यक्रमों को प्रारंभ में सी और/या उद्देश्य-सी अनुवादों के बाहर उपयोग करने के लिए डिज़ाइन नहीं किया गया था, इसलिए उन्होंने अनुवाद के लिए सशर्त सजावट के बिना extern
का उपयोग किया होगा।
अंत में, UIKIT_EXTERN
वास्तव में ऐसा नहीं कर सकते कि आप क्या उम्मीद/चाहते हैं, क्योंकि यह निर्दिष्ट करता है:
- एक extern सी प्रतीक
- जो डिफ़ॉल्ट दृश्यता
है ObjC अनुवाद के लिए दिखाई दे पुस्तकालय प्रतीकों के लिए , यह पूर्ण है।
एक और विकल्प 'FOUNDATION_EXPORT' प्रति http://stackoverflow.com/questions/10953221/foundation-export-vs- वैकल्पिक –