2015-02-07 386 views
1

我知道#define必须是不变的,但请给我任何好的提示。如何更改#define值

在我的情况下,我通过#define(例如#define kImageQuality 0.7)定义了一个常数值。 但是,我想在打开应用程序之前从Settings.Bundle更改常数值。 这意味着要改变常数值,不是吗? 那是否有任何方法来实现我的目标?

它应该更改为实例变量,而不是#define? 你给出的任何提示,将非常感激。

+0

它必须是一个非常量的全局变量。 – Linuxios 2015-02-07 02:19:52

+0

你可以在viewWillAppear或viewDidLoad上定义一个属性并设置其默认值,并在将来稍后更改它。 – eddwinpaz 2015-02-07 02:22:23

回答

3

这是不可能的,因为这样的:

#define constant 3 
... 
y = x + constant 

完全等价于:

y = x + 3 

#define d常数被取代的甚至在编译代码之前的预处理阶段的值。要动态改变这个值,你必须使用一个全局变量或者其他一些持久机制,如NSUserDefaults

+0

只要启用在 - (BOOL)应用程序中更改常量值:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions,我会很高兴。所以我打算用“y = x + 3”程序。非常感谢你! – user1574429 2015-02-07 11:06:12

5

#define常常在编译之前被预处理器开始替换(例如kImageQuality在编译之前被0.7取代)。因此,在应用程序启动之前加载它是不可能的,因为应用程序不会每次都重新编译。你需要使用一个变量:

float imageQuality = 0.7f;