【问题标题】:@dynamic implementation where to find it?@dynamic 实现在哪里可以找到它?
【发布时间】:2010-11-07 03:07:25
【问题描述】:

如果我有一个声明为@dynamic 的属性,我通常在哪里实现setter 和getter?我需要找到它在给定的代码库中的定义位置。

这与 MSManangedObject 有何关联?

【问题讨论】:

    标签: objective-c ipad core-data ios4


    【解决方案1】:

    假设您在这里谈论的是 NSManagedObject 的子类,那么 setter/getter 由 CoreData 提供。

    【讨论】:

    • 是模型映射自动生成的子类吗?还是我们手动创建?
    • 通常你首先创建一个实体,然后当你在 Xcode 中创建一个模型类时,你将它指向你创建的实体,然后为你生成一个 NSManagedObject 的子类。
    【解决方案2】:

    两个不同的东西:

    • 如果您谈论的是由数据建模器生成的类中用于表示核心数据实体的 @dynamic,那么实现也是由核心数据生成的。您只是无法访问它们。我认为你可以覆盖并放入你自己的,但我没有调查过。所以一般来说不用担心他们。

    • 在您定义的类(不是核心数据)中使用的@dynamic 意味着您将输入属性的 getter 和 setter。文档中有很多关于这些应该是什么样子的示例。通常,如果您不打算将属性的值存储在变量中,或者首先以某种方式对其进行转换,或者需要将一些其他处理挂钩到 getter/setter 概念中,那么您只会这样做。

      李>

    【讨论】:

    • 不确定您所说的“输入”getter/setter 是什么意思。但是像您描述的自定义 getter/setter 并不意味着它们是@dynamic。 @dynamic 意味着您在编译时根本不提供 getter/setter,但您承诺稍后在运行时引入它们(或处理转发)。对于普通的自定义 getter/setter(计算、转换等),您既不指定 @synthesize 也不指定 @dynamic。
    • 是的,您不需要进行@syntheize 或@dynamic 声明。我还刚刚检查了目标 C 文档,它说“......通过直接或在运行时提供方法实现......”这意味着您对它们进行编码(输入)或其他机制生成它们(例如核心数据) .如果我要执行,我总是会添加@dynamic 声明。除了清楚之外没有其他原因。 :-)
    猜你喜欢
    • 2019-05-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 2012-09-17
    • 2019-07-31
    • 1970-01-01
    相关资源
    最近更新 更多