【问题标题】:why would I need to use a primitive accessor methods in a core data project?为什么我需要在核心数据项目中使用原始访问器方法?
【发布时间】:2011-04-01 04:17:47
【问题描述】:

为什么我需要在核心数据项目中使用原始访问器方法?

我正在阅读 Core Data 并注意以下内容:

默认情况下,Core Data 是动态的 创建高效的公共和原始 获取和设置访问器方法 建模属性(属性和 管理对象的关系) 类...

例如,给定一个具有 属性 firstName,核心数据 自动生成名字, setFirstName:、primitiveFirstName 和 setPrimitiveFirstName:.

我仍然不确定原始访问器方法是什么?它们是如何工作的?我何时以及为什么需要在普通访问器方法上使用它们?

谢谢

【问题讨论】:

    标签: iphone core-data


    【解决方案1】:

    在普通类中,您通常不会使用原始访问器,但 Core Data 经常使用它们。最常见的场景:您编写了一个自定义访问器(执行维护、创建默认对象、处理持久属性的瞬态包装器等)但想使用 Core Data 的优化存储。如果优化的访问器是普通访问器,您的自定义访问器会阻止它可用,但您只需要使用原始访问器。

    此外,您从 Xcode 获得的默认访问器包括在对多关系中添加或删除对象的方法。如果这些方法使用普通访问器,普通访问器将触发整个集合的更改通知。相反,他们使用原始访问器并为他们正在更改的部分创建自己的更改通知。

    最重要的是原始访问器是获得优化存储的唯一途径。如果没有它们,您将不得不使用 Apple 反对的实例变量。

    【讨论】:

    • 谢谢 - 尽管我“有点”理解你所说的,但我发现作为一个新手,当(如果有的话)我需要使用原语时,我仍然不能真正理解访问者?对于新手,建议不要担心它们或尝试使用它们?
    • @Greg 在创建自定义访问器时在 Core Data 对象中使用它们,不要在其他任何地方使用它们。对于核心数据访问器的示例,右键单击模型中的关系或属性并选择“复制方法实现...”,然后粘贴到文档中。
    【解决方案2】:

    如果您在NSManagedObject 的子类中编写自己的方法,则原始访问器使您能够直接获取对象包含的数据。

    实际上,您可以像在普通类中使用实例变量一样使用它们。

    【讨论】:

    • 哦,好吧 - 所以如果你不继承没有理由使用它们呢?
    • 并非如此。只需使用普通访问器,因为它们会为您处理诸如通知之类的事情。
    【解决方案3】:

    原始访问器的主要用途是防止在更改值时发送键值观​​察通知。有时您不希望发送此类通知,因为它们有相当多的开销。例如。导入大量数据或使用临时值更改持久值时。

    您几乎总是在编写客户访问器方法时使用它们。如果您查看 Xcode 为托管对象子类生成的访问器方法,您可以了解它们是如何使用的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多