2012-04-22 67 views
6

我有一些常量編碼成幾個不同的viewController和NSObject類atm。我工作的一個人說我應該把它們放到他們自己的類中(即常量類)objective c常量類

我想知道這種類型的設計的專業版和專業版會是什麼樣的,做任何澄清如何做到這一點將是偉大的。

例如, 我只是創建一個新的NSObject類,並在其中有一堆#defines?那麼當我需要使用它們時,我只是繼承我的常量類,並使用這個類中的常量,就像我從其他類的任何其他方法或變量那樣?

myclass.theConstant 

任何幫助將大大appreicated。

+1

Manjunath在這裏發佈了一個很好的答案:http://stackoverflow.com/a/2377432/1218605 – 2012-04-22 22:50:34

回答

11

將常數與使用它們的東西放在一起。不要創建一個全局「一切常量」文件。這使得代碼重用非常令人頭疼。例如,如果您發佈通知,則需要通知名稱字符串。所以你把它放在發佈通知的類中:

.h 
extern NSString * const MYObjectDidSomethingNotification; 

.m 
NSString * const MYObjectDidSomethingNotification = @"MYObjectDidSomethingNotification"; 

常量通常不是方法或定義。它們只是像上面那樣的常量全局變量。儘可能避免使用#define,但是有一些地方非常有用(比如常量UIColor對象,否則它們會初始化)。

花一點時間在Apple頭文件中查看示例。在UIWindow.h,UITableViewCell.h和UITableView.h中查看常用定義的幾個很好的例子。

+0

好吧很酷,謝謝你的回覆。爲什麼#define不好?只是出於好奇。 – 2012-04-22 22:57:47

+0

我也想知道爲什麼定義對於常量不好。是否因爲缺乏類型安全? – borrrden 2012-04-22 23:33:23

+4

範圍界定。類型安全。可以在調試器中進行評估。更好的信息隱藏。改變常量不需要重新編譯整個程序。當意外重新定義定義時,避免引起編譯問題。有一些例外情況需要#define,並且在少數情況下是首選。但是你的默認值應該是用Objective-C編寫你的代碼,而不是使用預處理宏語言。再次看看Apple SDK,你會注意到#define的明顯缺乏,除非在特定情況下(如NSAssert)。 – 2012-04-23 00:19:52

0

如果你只有#defines他們不需要在任何類中 - 只需將它們粘貼在他們自己的.h文件中。