2015-04-29 86 views
0

我想通過名稱獲得我的extern constint值。如何通過名稱獲得「extern const int」值

舉例來說,在我的.h文件中:

extern const int MY_INT_CONST; 

在我的.m文件:

const int MY_INT_CONST = 0; 

我想要什麼:

- (void) method { 
    int i = [getMyConstantFromString:@"MY_INT_CONST"]; 
} 

我怎麼能這樣做?

我在RunTime API中搜索,但我沒有找到任何東西。

回答

1

有沒有簡單的方法來做到這一點。語言和運行時都不爲此提供便利。

可以使用動態加載器的API通過名稱來查找符號的地址。

// Near top of file 
#include <dlfcn.h> 

// elsewhere 
int* pointer = dlsym(RTLD_SELF, "MY_INT_CONST"); 
if (pointer) 
{ 
    int value = *pointer; 
    // use value... 
} 

請注意,這是傳遞到dlsym()的C風格的字符串。如果您有NSString,則可以使用-UTF8String來獲取C風格的字符串。

+0

這個作品真的很棒!坦克你的答案,你做了我的一天 –

0

不需要[getMyConstantFromString:@「MY_INT_CONST」];

直接使用如下

- (void) method { 
    int i = MY_INT_CONST; 
} 
+0

但是,如果我想獲得恆定的價值,我唯一的信息就是它的名字。有什麼辦法通過反思來實現嗎?我沒有其他選擇在我的上下文中使用反射。 –

+0

我不確定,但只有反思是可能的類。 –