iOS學習筆記3 – 命名空間

來源:互聯網
上載者:User

首先補充說明一下,這個系列不是教程,所以除了很可能會出錯之外,而且不會按什麼由淺入深的順序來寫。寫什麼主題完全看心情。

從C#轉到Objective-c開發之後,會產生這麼一個疑問:

Objective-C似乎沒有命名空間?

沒錯。C++和C#有namespace,Java有Package(當然和Namespace有差別),我最近開始寫的PHP也有如namespace com\example\johnslibrary\people;的命名空間,就連JavaScript。。。好吧讓我們忘了JavaScript吧,它應該沒有內建namespace(見http://elegantcode.com/2011/01/26/basic-javascript-part-8-namespaces/ 和 http://addyosmani.com/blog/essential-js-namespacing/)。

在開發C#的時候,經常會遇到不同NameSpace下有同樣名字的類的情況。這時候就可以通過alias來區分。
比如

using n1=Namespace1;using n2=Namespace2;n1.ClassA=new n1.ClassA();n2.ClassA=new n2.ClassA();

 

但Objective-C沒有。 

類似c,所有的東西都運行在同一個全域的命名空間裡。
所以在建立Objective-c的應用的時候,會有文字框,供輸入首碼(prefix)。
“NS”是內建的Cocoa的首碼,表示NextStep。這個首碼被蘋果佔了。NextStep與Mac OS的關係就不多說了。

但相比CompanyA.XXX.YYY這樣的通常NameSpace命名,首碼很容易衝突。如果我開了家叫MoeSoft的公司,首碼說不定就和微軟衝突了。
如果同時引用了MS首碼的MoeSoft和Microsoft的類庫就很可能悲劇了。

在stackoverflow有提出這樣的解決方案:
用NSBundle來載入其中一個framework,然後複製並重新命名,接下來載入另一個namespace。

另外還有一個建議是用@compatibility_alias來“重新命名”類。

詳細的可以看:
http://stackoverflow.com/questions/178434/what-is-the-best-way-to-solve-an-objective-c-namespace-collision

但如果能避免這個問題的話,還是盡量避免。那成語怎麼說來著?君子不立危牆之下。

所以除非是在寫最簡單的測試代碼,不然還是最好給自己的應用起一個足夠長足夠獨特的首碼。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.