【问题标题】:Declaration of properties at runtime?在运行时声明属性?
【发布时间】:2011-02-16 21:57:33
【问题描述】:

有没有办法在运行时在 Obj-C 中声明属性?我一直在寻找类似 @​​987654321@ 的东西,但要寻找属性。

【问题讨论】:

  • 重点是什么?他们不会任何事情。您只能使用在编译时为类型声明的属性,并且它们被转换为方法调用以在运行时完成它们的工作。编译器不会让您获取或设置它们,除非通过方法调用,因此您不妨跳过属性并添加方法。

标签: objective-c runtime objective-c-runtime


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    您可能希望查看更轻量级的方法,例如拦截消息(NSObject>>(id)forwardingTargetForSelector 和相关方法)。

    【讨论】:

    • 我实际上是在寻找自动 KVO/KVC。有很多方法可以手动完成,但我最终放弃了这种方法,但是嗯。
    猜你喜欢
    • 2015-06-22
    • 2015-08-01
    • 1970-01-01
    • 2013-11-26
    • 2015-10-04
    • 2013-03-11
    • 2012-11-23
    • 2015-09-26
    • 2011-01-15
    相关资源
    最近更新 更多