Objective c 关于@synthesis[property name]语法的一个问题

Objective c 关于@synthesis[property name]语法的一个问题,objective-c,properties,llvm,Objective C,Properties,Llvm,在我花更多时间之前,我只想得到一个明确的答案:我在胡乱编写预处理器宏来简化Objective-C属性的合成。我看到的一个想法是类似于#define synthesis(_X_)@synthesis _X_=_##(u X),它使用下划线前缀将属性绑定到类似命名的实例变量 为了进一步说明这一点,我的问题是,我是否能够使用属性名调用@synthesis,但间接地获取该属性名?例如,如果我做一些类内省来通过一个类查找所有属性的名称,是否可以将其中一个传递到@synthesis,或者它必须是实际名称本身

在我花更多时间之前,我只想得到一个明确的答案:我在胡乱编写预处理器宏来简化Objective-C属性的合成。我看到的一个想法是类似于
#define synthesis(_X_)@synthesis _X_=_##(u X)
,它使用下划线前缀将属性绑定到类似命名的实例变量


为了进一步说明这一点,我的问题是,我是否能够使用属性名调用@synthesis,但间接地获取该属性名?例如,如果我做一些类内省来通过一个类查找所有属性的名称,是否可以将其中一个传递到@synthesis,或者它必须是实际名称本身?如果它有任何用处,我将使用LLVM 2.0进行编译。

不,您不能在运行时进行合成。这就是您所要求的——运行时代码,它将内省属性并生成getter/setter。然而@synthesis是一种编译时功能,必须在编译时出现在代码中才能工作。

是否有一种方法可以根据属性内省的结果,在运行时使用class_addMethod添加getter和setter?据我所知,你必须预先定义一个IMP来引用,所以这可能是不可能的。这当然是可能的,但需要你编写C函数来充当IMP,这些函数足够灵活,可以根据SEL来决定做什么。它们也会比生成的方法慢,并且您可能会遇到原子属性的问题。我不建议你试试。