Objective-C tidak memiliki ruang nama; itu seperti C, semuanya dalam satu namespace global. Praktik umum adalah untuk mengawali kelas dengan inisial, misalnya jika Anda bekerja di IBM, Anda bisa mengawali mereka dengan "IBM"; jika Anda bekerja untuk Microsoft, Anda dapat menggunakan "MS"; dan seterusnya. Terkadang inisial merujuk pada proyek, misalnya kelas awalan Adium dengan "AI" (karena tidak ada perusahaan di belakangnya sehingga Anda dapat mengambil inisial). Awalan Apple kelas dengan NS dan mengatakan awalan ini dicadangkan untuk Apple saja.
Sejauh ini sangat baik. Tetapi menambahkan 2 hingga 4 huruf ke nama kelas di depan adalah namespace yang sangat, sangat terbatas. Misalnya MS atau AI dapat memiliki arti yang sama sekali berbeda (AI bisa jadi Kecerdasan Buatan misalnya) dan beberapa pengembang lain mungkin memutuskan untuk menggunakannya dan membuat kelas yang sama namanya. Bang , tabrakan namespace.
Oke, jika ini adalah tabrakan antara salah satu kelas Anda dan salah satu kerangka eksternal yang Anda gunakan, Anda dapat dengan mudah mengubah penamaan kelas Anda, bukan masalah besar. Tetapi bagaimana jika Anda menggunakan dua kerangka kerja eksternal, kedua kerangka kerja yang Anda tidak memiliki sumbernya dan Anda tidak dapat mengubahnya? Aplikasi Anda terhubung dengan keduanya dan Anda mendapat konflik nama. Bagaimana Anda menyelesaikannya? Apa cara terbaik untuk mengatasi mereka sedemikian rupa sehingga Anda masih dapat menggunakan kedua kelas?
Di C Anda dapat mengatasi ini dengan tidak menautkan langsung ke perpustakaan, sebaliknya Anda memuat perpustakaan saat runtime, menggunakan dlopen (), kemudian menemukan simbol yang Anda cari menggunakan dlsym () dan menetapkannya ke simbol global (bahwa Anda dapat memberi nama dengan cara apa pun yang Anda suka) dan kemudian mengaksesnya melalui simbol global ini. Misalnya jika Anda memiliki konflik karena beberapa pustaka C memiliki fungsi bernama open (), Anda bisa mendefinisikan variabel bernama myOpen dan mengarahkannya ke fungsi open () pustaka, jadi ketika Anda ingin menggunakan sistem open () , Anda hanya menggunakan open () dan ketika Anda ingin menggunakan yang lain, Anda mengaksesnya melalui pengenal myOpen.
Apakah sesuatu yang serupa mungkin terjadi di Objective-C dan jika tidak, apakah ada solusi cerdas dan rumit lainnya yang dapat Anda gunakan menyelesaikan konflik namespace? Ada ide?
Memperbarui:
Untuk memperjelas ini: jawaban yang menyarankan cara menghindari tabrakan namespace di muka atau cara membuat namespace yang lebih baik tentu disambut; namun, saya tidak akan menerimanya sebagai jawaban karena mereka tidak menyelesaikan masalah saya. Saya memiliki dua perpustakaan dan nama kelas mereka bertabrakan. Saya tidak bisa mengubahnya; Saya tidak punya sumber keduanya. Tabrakan sudah ada dan tips tentang bagaimana hal itu bisa dihindari sebelumnya tidak akan membantu lagi. Saya dapat meneruskannya ke pengembang kerangka kerja ini dan berharap mereka memilih namespace yang lebih baik di masa depan, tetapi untuk saat ini saya sedang mencari solusi untuk bekerja dengan kerangka kerja sekarang dalam satu aplikasi. Ada solusi untuk membuat ini mungkin?