Ios 如何隐藏我在静态库中定义的常量?

Ios 如何隐藏我在静态库中定义的常量?,ios,static-libraries,Ios,Static Libraries,我有自己的图书馆。在标题中定义了很多常量(例如动画持续时间)。但是,我的所有标题都是可见和可更改的。如何防止他人更改我的默认值 Apple库的标题中有一些常量值,如下所示: CA_外部NSString*常量KCATRANSIONMOVEIN __OSX可用启动(MAC 10 5,IPHONE 2 0) Objective-C仍然是,嗯,C。可能旧的系统有问题,这就是为什么您会在那里看到宏。无论如何,使用任何内置类型都应该是安全的 如果您将某个东西声明为“extern”,编译器会将其视为“好的,我

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

Apple库的标题中有一些常量值,如下所示:

CA_外部NSString*常量KCATRANSIONMOVEIN
__OSX可用启动(MAC 10 5,IPHONE 2 0)

Objective-C仍然是,嗯,C。可能旧的系统有问题,这就是为什么您会在那里看到宏。无论如何,使用任何内置类型都应该是安全的

如果您将某个东西声明为“extern”,编译器会将其视为“好的,我看到有人声明了和外部的东西。我不必知道它是什么,因为某些外部单元将定义它。链接器将处理其余部分

这段话会让我和C-police有麻烦,但它足够接近一个实际的解释。因此,你可以在你的头文件中这样做

extern int const TheAnswerToLifeTheUniverseAndEverything;
然后,在一个实现文件中(在@implementation/@end部分之外)

注意,在“现代”Xcode版本中,您可以对对象执行相同的操作

// In header
extern NSString * const TheAnswerToLifeTheUniverseAndEverythingString;

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

如果人们决心更改您的代码及其行为,他们会找到一种方法。对此没有什么可做的。但是,为了限制意外更改和副作用,请参阅我的答案。
// In header
extern NSString * const TheAnswerToLifeTheUniverseAndEverythingString;

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