2012-04-19 55 views
1

我有我自己的图书馆。在标题中定义了很多常量(例如动画持续时间)。但是,我的所有标题都是可见的和可更改的。我如何防止他人更改我的默认值?如何隐藏我在静态库中定义的常量?

有苹果图书馆这样的标题一些常量的值:

CA_EXTERN的NSString * const的kCATransitionMoveIn __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);

+0

如果人们决心改变你的代码及其行为,他们会找到一种方法。对此没有太多要做。但是,为了限制意外变化和副作用,请参阅我的答案。 – 2012-04-19 15:19:04

回答

3

Objective-C仍然是C语言,也许老的系统有问题,这就是为什么你在那里看到宏。无论如何,你应该仍然安全的任何内置类型。

如果你声明一些东西是“extern”,编译器会把它看作是“好的,我看到有人声明了外部的东西,我不必知道它是什么东西,因为一些外部单元会定义它,链接器将完成剩下的事情。

该段将让我在与C-警察麻烦的,但它是一个实际的解释足够接近。因此,你可以在你的头文件执行此操作...

extern int const TheAnswerToLifeTheUniverseAndEverything; 

然后,在您的一个实现文件(@ implementation/@ end部分之外)...

int const TheAnswerToLifeTheUniverseAndEverything = 42; 

请注意,在“现代”Xcode版本中,您可以使用对象做同样的事情。注意“const”,这意味着我们有一个常量指向NSString的指针。

// In header 
extern NSString * const TheAnswerToLifeTheUniverseAndEverythingString; 

// In source 
NSString * const TheAnswerToLifeTheUniverseAndEverythingString = @"42";