【问题标题】:How to access a variable from a H file如何从 H 文件中访问变量
【发布时间】:2015-05-27 11:07:30
【问题描述】:
我在 Constants.h 文件中定义了一些变量。
#ifndef Constants_h
#define Constants_h
static NSString *SERVER_IMG_URL = @"http://localhost/img";
...
如果我在 M 文件中导入 Constants.h。如何访问 SERVER_IMG_URL??
我想用它,不要在所有文件中重复url,只调用这个变量。因为,如果我需要更改 IP,请在一个文件中更改,而不是更多。
谢谢
【问题讨论】:
标签:
ios
objective-c
constants
【解决方案1】:
我希望这会有所帮助..
将此写入常量文件中..
#define kURLname @"http://localhost/img"
在 .m 中导入常量文件后,在你的项目 .m 文件中像这样使用它...
NSString *SERVER_IMG_URL = kURLname;
【解决方案2】:
在 Constant.h 文件中,您可以将变量声明为
FOUNDATION_EXPORT NSString *const SERVER_IMG_URL;
在.m文件中
NSString *const SERVER_IMG_URL = @"http://localhost/img";
之后将 Contant.h 导入 .pch 文件,以便整个项目都可以访问您的变量。
【解决方案3】:
如果可以的话,我会避免使用#define。
它们更难调试,因为它们在预处理时被解包(因此您编写的代码和您实际运行的代码可能完全相同)并且缺乏您可以从中获得的潜在类型安全检查命名类型。
我会使用 VMConstants.h 和 VMConstants.m 对来解决这个问题。
从你的 VMConstants.h 中的类似内容开始
extern const NSString * const kURLname;
然后在您的 VMConstants.m 文件中
const NSString * const kURLname = @"http://localhost/img";
我会尽可能多地使用 const,以便它尽可能不可变(更少的移动部分),并为您的常量名称添加一个合适的前缀,以避免与认为他们的第三方库需要的其他任何人发生冲突一个常量。
我还会问自己,您是否真的需要该常量文件,因为随着时间的推移,它很可能会成为东西的垃圾场,并且会不断增长,直到您的应用完全与它。
更糟糕的是,人们可能会以非预期的方式重复使用那里的价值观。颜色是这种情况的常见颜色,我发现突然之间你的按钮和导航栏 UI 是相互关联的。
简而言之,尽可能避免公开文字值(因此,将它们放在 m 中,只在 h 中公开类型名称),并尽可能避免使用全局变量。