2011-01-20 66 views
1

我只想在我花更多時間之前得到一個明確的答案:我正在編寫預處理器宏以簡化合成Objective-C屬性。我見過的一個想法類似#define SYNTHESIZE(_X_) @synthesize _X_ = _##_X_,它將一個屬性綁定到一個帶有下劃線前綴的名稱相似的實例變量。關於@synthesize [property name]語法的問題

爲了進一步探討這個問題,我的問題是,我可以打電話給屬性名稱調用@synthesize,但間接獲取該屬性名稱?例如,如果我通過類來反省所有屬性的名稱,是否可以將其中的一個傳遞給@synthesize,或者它是否必須是實際名稱本身?如果它有任何用處,我正在用LLVM 2.0進行編譯。

回答

2

不,你不能在運行時綜合。這就是你要求的 - 運行時代碼,它反映了屬性並生成getters/setters。然而@synthesize是一個編譯時的特性,並且在編譯時必須出現在代碼中才能工作。

+0

會有一種方法來添加getter和setter在運行時與class_addMethod,基於屬性內省的結果?根據我的理解,你必須預先定義一個IMP來引用,所以這可能是不可能的。 – 2011-01-20 23:17:18