2009-11-19 51 views
2

命名空間約定我想組類,因此他們必須像這樣被引用:對Objective-C的

Root.Web 
Root.Mail 
Root.Audio 

以上每個類別對應一個文件:

Web.h 
Mail.h 
Audio.h 

目標就是用上面的「根」語法,而不是隻是:相反

Audio myAudio = [[Audio alloc] init]; 

,它應該看起來像:

Root.Audio myAudio = [[Root.Audio alloc] init]; 

Objective-C能夠做到這一點嗎?

回答

7

Objective-c不支持命名空間(因爲c不),所以你不能這樣做。爲了避免潛在的衝突,你可以添加你的特定前綴到類名

Herehere是類似的問題,可能你會發現它們有用。

順便說一句,我認爲,如果命名空間提供了支持,他們在CPP樣的方式得到解決更多的(如myNameSpace對象:: MyClass的,不是MyNamespace.MyClass)

2

儘管Objective-C可以做到這一點,但如果您將Root作爲預先聲明或動態構建的屬性,我真的會推薦它。

它違背Objective-C的標準。應該沒有必要使用這種方法。

每種語言都以某種方式構建,因此應該使用。以上不是Objective-C應該如何使用。

你爲什麼要這樣使用它?

如果每個對象都可以訪問Root.Audio,爲了播放文件,那麼爲什麼不把Audio設置爲singleton,或者在Audio上有一個可以存儲和檢索已聲明實例的類方法?你的運行時的每個對象都可以訪問類方法。

4

不是我所知,你在Objective-C(或C)中做什麼來實現這一點,而是命名空間類名。

RootAudio *myAudio = [[RootAudio alloc] init]; 
+1

感謝。我想這是後面提到的前綴命名約定。 – 4thSpace

+0

確切地說,如果你看看可可中的內置類,他們使用例如NS(NextStep),CA(CoreAnimation)等。 – hallski