2012-04-22 57 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文件中。