2012-10-14 83 views
2

可能重複:
What is the best way to solve an Objective-C namespace collision?如何解決objective-c中的命名空間衝突?

我有發展第三方動態庫的iPhone,取決於移動襯底。 問題是,如果某些APP有一個名爲「Class1」的Obj-C類,而我的dylib也有一個名爲「Class1」的類,則不能保證在運行時將使用哪個類。 是否有解決方案,我可以保持類名「Class1」,並解決命名空間問題?

+0

我聽說過Mac OS上的兩級命名空間,但在iphone平臺上似乎是扁平的命名空間? –

+0

沒有簡單的解決方案。請參閱[什麼是解決Objective-C命名空間碰撞的最佳方法?](http://stackoverflow.com/questions/178434/what-is-the-best-way-to-solve-an-objective-c-命名空間碰撞)命名空間是爲你的目的而平坦的,但迂腐它不是(請參閱關於該鏈接的Bavarious評論) – Jano

+1

Apple似乎總是用兩個字母來代表自己的代碼。核心位置爲CL,核心動畫爲CA,基礎數據類型爲NS。 –

回答

2

在Objective-C中,名稱空間的概念並不存在,源文件只是簡單地導入到另一個文件中,並且如果通用名稱用作類名稱,這當然會導致名稱衝突。

解決Objective-C中碰撞問題的一個好方法是採用一個前綴來區分你的類名和其他類名,這是蘋果自己已經使用的技術,讓我們考慮一下數組類,它被稱爲NSArray,爲什麼?

有後面某個特定的原因:

  • Ñ:識別接着
  • 小號:識別步驟
  • 陣列:識別所述數據的名稱結構

NextStep是創建Foundation框架的公司的名稱,以及Apple在90年代中期被收購的公司的名稱。

我例如使用不同的前綴爲我打包在庫中的類,我使用:AleArray我的名字的前3個字符後跟數據結構的名稱,您可以選擇自己的前綴和繼續...

當然,使用簡單前綴的衝突概率仍然高於使用名稱空間(通常使用反向域名錶示法),但在大多數情況下可能就足夠了。