2015-02-07 1001 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;