Objective-C'nin isim alanı yoktur; C'ye çok benziyor, her şey tek bir global isim alanında. Yaygın uygulama, sınıflara baş harfleri önekini eklemektir; örneğin, IBM'de çalışıyorsanız, bunları "IBM" ile ön ek yapabilirsiniz; Microsoft için çalışıyorsanız, "MS" kullanabilirsiniz; ve bunun gibi. Bazen baş harfleri projeye atıfta bulunur, örneğin Adium "AI" ile sınıflara önek ekler (bunun arkasında hiçbir şirket olmadığından baş harflerini alabilirsiniz). Apple, sınıfları NS ile ön ekler ve bu ön ekin yalnızca Apple için ayrıldığını söyler.
Şimdiye kadar çok iyi. Ancak öndeki bir sınıf adına 2 ila 4 harf eklemek çok, çok sınırlı bir ad alanıdır. Örneğin, MS veya AI tamamen farklı anlamlara sahip olabilir (AI Yapay Zeka olabilir) ve diğer bazı geliştiriciler bunları kullanmaya ve eşit derecede adlandırılmış bir sınıf oluşturmaya karar verebilir. patlama , ad alanı çarpışması.
Tamam, eğer bu kendi sınıflarınızdan biri ile kullandığınız harici bir çerçeve arasında bir çarpışma ise, sınıfınızın adını kolayca değiştirebilirsiniz, önemli değil. Peki ya iki dış çerçeve kullanırsanız, her ikisi de kaynağınız olmayan ve değiştiremeyeceğiniz çerçeveler? Uygulamanız her ikisiyle de bağlantı kurar ve ad çakışmaları yaşarsınız. Bunları nasıl çözerdiniz? Her iki sınıfı da kullanabilmeniz için etraflarında çalışmanın en iyi yolu nedir?
C'de doğrudan kütüphaneye bağlanarak bunları çözebilir, bunun yerine kütüphaneyi çalışma zamanında yükler, dlopen () kullanarak, sonra dlsym () kullanarak aradığınız sembolü bulup genel bir sembole ( istediğiniz şekilde adlandırabilirsiniz) ve ardından bu global sembolle erişebilirsiniz. Örneğin, bazı C kütüphanelerinin open () adında bir işlevi olduğu için çakışma yaşıyorsanız, myOpen adında bir değişken tanımlayabilir ve kütüphanenin open () işlevine işaret etmesini sağlayabilirsiniz, böylece sistemi open () kullanmak istediğinizde , sadece open () kullanırsınız ve diğerini kullanmak istediğinizde, myOpen tanımlayıcı üzerinden erişirsiniz.
Objective-C de benzer bir şey mümkün mü ve eğer değilse, ad alanı çatışmalarını çözmek için kullanabileceğiniz başka akıllı, zor bir çözüm var mı? Herhangi bir fikir?
Güncelleme:
Sadece bunu açıklığa kavuşturmak için: ad alanı çarpışmalarından nasıl kaçınılacağını veya daha iyi bir ad alanının nasıl oluşturulacağını öneren cevaplar kesinlikle hoş karşılanır; ancak sorunumu çözmedikleri için cevap olarak kabul etmeyeceğim . İki kütüphanem var ve sınıf isimleri çarpışıyor. Onları değiştiremem; İkisinden birinin kaynağı yok. Çarpışma zaten orada ve bundan nasıl kaçınılabileceğine dair ipuçları artık yardımcı olmayacak. Onları bu çerçevelerin geliştiricilerine iletebilirim ve gelecekte daha iyi bir ad alanı seçtiklerini umuyorum, ancak şimdilik tek bir uygulamada çerçevelerle çalışmak için bir çözüm arıyorum. Bunu mümkün kılmak için herhangi bir çözüm var mı?