2011-02-16 54 views
0

有没有办法在运行时在Obj-C中声明属性?我一直在寻找类似class_addMethod但属性。在运行时声明属性?

+1

这一点到底是什么?他们不会做任何事情。您只能在编译时使用为类型声明的属性,并将它们转换为方法调用以在运行时执行它们的工作。除非通过方法调用,否则编译器不会让您获取或设置它们,因此您可以跳过该属性并添加方法。 – Chuck 2011-02-16 22:09:27

回答

2

一个常见的误解是,@property意味着代码生成。它不是。 @synthesize这样做。所以,真的,你的问题可能是有没有办法在运行时生成setter/getter方法?

答案当然是肯定的,你会准确地使用你已经找到的东西。

0

属性是getter/setter方法的语法糖。
你不能在运行时声明它们。正如上面的评论所说,你将如何使用它们?
但是你可以声明它们并在运行时添加实现。 @synthesize关键字只需安装默认的getter/setter实现。为了防止这种情况,请使用@dynamic关键字,并在运行时提供实现。

你可能想要看一下轻量级的方法,比如拦截消息(NSObject >>(id)forwardingTargetForSelector和相关的方法)。

+0

我实际上是在寻找自动KVO/KVC。有办法手动完成,但我最终放弃了这种方法,但是嗯。 – 2011-02-26 05:56:04