วัตถุประสงค์ -C ไม่มีเนมสเปซ มันเหมือนกับ C ทุกอย่างอยู่ในเนมสเปซส่วนกลางเดียว วิธีปฏิบัติทั่วไปคือการเติมคำนำหน้าคลาสด้วยชื่อย่อเช่นถ้าคุณทำงานที่ IBM คุณสามารถใช้คำนำหน้าด้วย "IBM" ถ้าคุณทำงานให้ Microsoft คุณสามารถใช้ "MS"; และอื่น ๆ บางครั้งชื่อย่ออ้างถึงโครงการเช่น Adium นำหน้าคลาสด้วย "AI" (เนื่องจากไม่มี บริษัท ใดอยู่ด้านหลังซึ่งคุณสามารถใช้ชื่อย่อได้) คำนำหน้าของ Apple คลาสที่มี NS และบอกว่าคำนำหน้านี้สงวนไว้สำหรับ Apple เท่านั้น
จนถึงตอนนี้ก็ดี แต่การเพิ่มตัวอักษร 2 ถึง 4 ตัวต่อท้ายชื่อคลาสด้านหน้าเป็นเนมสเปซที่ จำกัด มาก เช่น MS หรือ AI อาจมีความหมายที่แตกต่างกันโดยสิ้นเชิง (เช่น AI เป็นปัญญาประดิษฐ์เป็นต้น) และผู้พัฒนารายอื่นอาจตัดสินใจใช้และสร้างคลาสที่มีชื่อเท่าเทียมกัน บางชน namespace
เอาล่ะถ้านี่เป็นการชนกันระหว่างคลาสของคุณเองกับหนึ่งในเฟรมเวิร์กภายนอกที่คุณใช้อยู่คุณสามารถเปลี่ยนการตั้งชื่อคลาสของคุณได้โดยง่าย แต่ถ้าคุณใช้เฟรมเวิร์กภายนอกสองเฟรมเวิร์กทั้งสองที่คุณไม่มีแหล่งที่มาและคุณไม่สามารถเปลี่ยนได้ แอปพลิเคชันของคุณเชื่อมโยงกับทั้งคู่และคุณจะได้รับความขัดแย้งของชื่อ คุณจะไปแก้ปัญหาเหล่านี้อย่างไร? อะไรคือวิธีที่ดีที่สุดในการแก้ไขสิ่งเหล่านี้ในแบบที่คุณยังสามารถใช้ทั้งสองคลาสได้
ใน C คุณสามารถหลีกเลี่ยงสิ่งเหล่านี้ได้โดยไม่เชื่อมโยงโดยตรงกับไลบรารีแทนคุณโหลดไลบรารี่ขณะใช้งานโดยใช้ dlopen () จากนั้นหาสัญลักษณ์ที่คุณต้องการใช้ dlsym () และกำหนดให้กับสัญลักษณ์ทั่วโลก สามารถตั้งชื่อตามที่คุณต้องการ) จากนั้นเข้าถึงผ่านสัญลักษณ์ระดับโลกนี้ เช่นถ้าคุณมีข้อขัดแย้งเพราะบางไลบรารี C มีฟังก์ชั่นชื่อ open () คุณสามารถกำหนดตัวแปรชื่อ myOpen และให้มันชี้ไปที่ฟังก์ชั่น open () ของไลบรารีดังนั้นเมื่อคุณต้องการใช้ระบบ open () คุณเพียงแค่ใช้ open () และเมื่อคุณต้องการใช้อีกอันคุณก็สามารถเข้าถึงมันได้ผ่านตัวระบุ myOpen
เป็นสิ่งที่คล้ายกันเป็นไปได้ใน Objective-C และถ้าไม่มีวิธีอื่นที่ฉลาดและมีเล่ห์เหลี่ยมที่คุณสามารถใช้แก้ไขเนมสเปซที่ขัดแย้งกันได้หรือไม่? ความคิดใด ๆ
ปรับปรุง:
เพื่อชี้แจงสิ่งนี้: คำตอบที่แนะนำวิธีหลีกเลี่ยงการชนของเนมสเปซล่วงหน้าหรือจะสร้างเนมสเปซที่ดีขึ้นได้อย่างไร อย่างไรก็ตามฉันจะไม่ยอมรับพวกเขาเป็นคำตอบเนื่องจากพวกเขาไม่ได้แก้ปัญหาของฉัน ฉันมีสองไลบรารีและชื่อคลาสของพวกเขาชนกัน ฉันไม่สามารถเปลี่ยนได้ ฉันไม่มีที่มาอย่างใดอย่างหนึ่ง การปะทะกันนั้นมีอยู่แล้วและเคล็ดลับเกี่ยวกับวิธีการหลีกเลี่ยงล่วงหน้าจะไม่ช่วยอีกต่อไป ฉันสามารถส่งต่อพวกเขาไปยังนักพัฒนาของเฟรมเวิร์กเหล่านี้และหวังว่าพวกเขาจะเลือกเนมสเปซที่ดีขึ้นในอนาคต แต่ในขณะนี้ฉันกำลังค้นหาโซลูชันเพื่อทำงานกับเฟรมเวิร์ก ทางออกใดที่จะทำให้สิ่งนี้เป็นไปได้?