उद्देश्य-सी का कोई नामस्थान नहीं है; यह बहुत कुछ सी की तरह है, सब कुछ एक वैश्विक नाम स्थान के भीतर है। सामान्य अभ्यास प्रारंभिक कक्षाओं के साथ उपसर्ग करना है, उदाहरण के लिए यदि आप आईबीएम पर काम कर रहे हैं, तो आप उन्हें "आईबीएम" के साथ उपसर्ग कर सकते हैं; यदि आप Microsoft के लिए काम करते हैं, तो आप "MS" का उपयोग कर सकते हैं; और इसी तरह। कभी-कभी प्रारंभिक परियोजना का उल्लेख करते हैं, उदाहरण के लिए "एआई" के साथ एडियम उपसर्ग वर्ग (जैसा कि इसके पीछे कोई कंपनी नहीं है कि आप आद्याक्षर ले सकते हैं)। Apple NS के साथ कक्षाएं उपसर्ग करता है और कहता है कि यह उपसर्ग केवल Apple के लिए आरक्षित है।
अभी तक तो ठीक है। लेकिन सामने एक वर्ग के नाम के लिए 2 से 4 पत्र जोड़ना एक बहुत ही सीमित नाम स्थान है। उदाहरण के लिए, MS या AI एक पूरी तरह से अलग अर्थ हो सकता है (AI उदाहरण के लिए Artificial Intelligence हो सकता है) और कुछ अन्य डेवलपर उनका उपयोग करने और समान रूप से नामित वर्ग बनाने का निर्णय ले सकते हैं। बैंग , नेमस्पेस टक्कर।
ठीक है, अगर यह आपकी अपनी कक्षाओं में से एक और आपके द्वारा उपयोग किए जा रहे बाहरी ढांचे के बीच टकराव है, तो आप आसानी से अपनी कक्षा के नामकरण को बदल सकते हैं, कोई बड़ी बात नहीं। लेकिन क्या होगा यदि आप दो बाहरी फ्रेमवर्क का उपयोग करते हैं, दोनों फ्रेमवर्क जो आपके पास स्रोत नहीं हैं और जिन्हें आप बदल नहीं सकते हैं? आपका आवेदन उन दोनों के साथ लिंक करता है और आपको नाम संघर्ष मिलते हैं। आप इनका समाधान कैसे करेंगे? इस तरह से उनके आसपास काम करने का सबसे अच्छा तरीका क्या है कि आप अभी भी दोनों वर्गों का उपयोग कर सकते हैं?
C में आप लाइब्रेरी से सीधे लिंक न करके इनके चारों ओर काम कर सकते हैं, इसके बजाय आप dlopen () का उपयोग करके रनटाइम पर लाइब्रेरी को लोड करते हैं, फिर उस प्रतीक को ढूंढें जिसे आप dlsym () का उपयोग करके देख रहे हैं और इसे एक वैश्विक प्रतीक (जिसे आप असाइन करते हैं) अपनी पसंद के किसी भी तरीके को नाम दे सकते हैं) और फिर इस वैश्विक प्रतीक के माध्यम से एक्सेस कर सकते हैं। उदाहरण के लिए, यदि आपका कोई विरोध है, क्योंकि कुछ C लाइब्रेरी में ओपन () नाम का एक फंक्शन है, तो आप myOpen नाम के एक वेरिएबल को परिभाषित कर सकते हैं और यह लाइब्रेरी के ओपन () फंक्शन की ओर इशारा करता है, इस प्रकार जब आप सिस्टम ओपन () का उपयोग करना चाहते हैं , आप बस खुले का उपयोग करें () और जब आप दूसरे का उपयोग करना चाहते हैं, तो आप इसे myOpen पहचानकर्ता के माध्यम से एक्सेस करते हैं।
क्या ऑब्जेक्टिव-सी में कुछ ऐसा ही संभव है और यदि नहीं, तो क्या आप नाम-स्थान के टकराव के समाधान का उपयोग कर सकते हैं? कोई विचार?
अपडेट करें:
बस इसे स्पष्ट करने के लिए: उत्तर देने वाले सुझाव देते हैं कि अग्रिम में नेमस्पेस टकराव से कैसे बचा जाए या बेहतर नाम स्थान कैसे बनाएं, निश्चित रूप से स्वागत है; हालाँकि, मैं उन्हें उत्तर के रूप में स्वीकार नहीं करूंगा क्योंकि वे मेरी समस्या का समाधान नहीं करते हैं। मेरे पास दो पुस्तकालय हैं और उनके वर्ग के नाम टकराते हैं। मैं उन्हें बदल नहीं सकता; मेरे पास किसी एक का स्रोत नहीं है। टक्कर पहले से ही है और अग्रिम में कैसे बचा जा सकता है पर सुझाव अब मदद नहीं करेगा। मैं उन्हें इन चौखटे के डेवलपर्स के लिए अग्रेषित कर सकता हूं और आशा करता हूं कि वे भविष्य में एक बेहतर नाम स्थान का चयन करेंगे, लेकिन फिलहाल मैं एक ही आवेदन के भीतर चौखटे के साथ काम करने के लिए एक समाधान खोज रहा हूं। इसे संभव बनाने के लिए कोई उपाय?