目标c常数类

C.J*_*hns 6 iphone const uiviewcontroller nsobject ios

我有一些常量编码到几个不同的viewController和NSObject类atm.我工作的其中一个人说我应该将它们放入自己的类中(即常量类)

我想知道这种类型的设计的专业人士和内容是什么,如果它应该做什么,任何关于如何做的澄清将是伟大的.

例如,我只是创建一个新的NSObject类并在其中包含一堆#defines吗?然后,当我需要使用它们时,我只是继承我的常量类并使用此类中的常量,就像我将来自另一个类的任何其他方法或变量一样?

myclass.theConstant
Run Code Online (Sandbox Code Playgroud)

任何帮助都会有很大的帮助.

Rob*_*ier 11

将常量与使用它们的东西放在一起.不要创建全局"一切常量"文件.这使代码重用成为一个巨大的问题.例如,如果您发布通知,则需要通知名称字符串.所以你把它放在发布通知的类中:

.h
extern NSString * const MYObjectDidSomethingNotification;

.m
NSString * const MYObjectDidSomethingNotification = @"MYObjectDidSomethingNotification";
Run Code Online (Sandbox Code Playgroud)

常量通常不是方法或定义.它们只是像上面那样的恒定全局变量.你应该尽可能地避免使用#define,但是有些地方它非常有用(比如常量UIColor对象,否则会很难初始化).

花一点时间在Apple头文件中查看示例.查看UIWindow.h,UITableViewCell.h和UITableView.h,了解一般如何定义常量的几个很好的例子.

  • 范围界定.类型安全.可以在调试器中进行评估.更好的信息隐藏.更改常量不需要重新编译整个程序.在定义被意外重新定义时避免令人费解的编译问题.有些例外情况需要#define,在少数情况下是首选.但是你的默认值应该是在Objective-C中编写代码,而不是在预处理器宏语言中.再看看Apple SDK,你会注意到#define的显着缺失,除非在非常特殊的情况下(如NSAssert). (4认同)