核心数据 - 原始的setter / getter更快吗?什么时候不用?

时间:2012-12-21 02:16:25

标签: core-data

来自Apple的核心数据编程指南:

  

核心数据动态生成有效的公共和原始get和   设置属性访问器方法和关系访问器方法   托管对象类。

     

...

     

原始访问器方法类似于“普通”或公共键值   编码兼容的访问器方法,但Core Data使用它们除外   访问数据的最基本的数据方法,因此他们没有   发出键值访问或观察通知。换一种方式,   它们是对于primitiveValueForKey:和setPrimitiveValue:forKey:什么   public accessor方法是valueForKey:和setValue:forKey:。

我希望原始访问器方法比公共访问器更好,因为它们不会触发KVO通知。有没有办法用Time Profiler有效地测试这个理论? (当然,它不能像将两个调用放在他们自己的for循环中那么容易,这些循环迭代了数万次并比较结果......)

显然原始访问器不是由Managed Object子类之外的对象或函数调用的,但是什么时候不应该在类中使用它们?

1 个答案:

答案 0 :(得分:1)

edelaney05,

如您所知,Core Data依赖于Objective-C的KVC / KVO功能。是的,你是正确的,通过访问器的路径长度稍长。它是什么?核心数据的性能主要取决于I / O子系统的性能。

IOW,调整获取请求比避免访问开销要重要得多。你可以做你提出的建议吗?是。你应该?不,您应该,IMO,专注于如何有效地将您的数据导入MOC,然后使用谓词和其他过滤技术对其进行优化。学习如何在获取后使用各种键路径运算符和谓词语言对于编写高性能CD代码非常重要。只有在仪器可以记录您在访问器中花费了相当多的时间后,我才会考虑您的避免它们的策略。

在回答您的具体问题时,您通常应该限制在重新实现公共访问者的过程中使用原始访问者。坚持使用所有代码的访问器,然后成为您的标准模式。这为您提供了将任意行为与任何属性相关联的长期工程优势。最后,如果您可以使用各种键路径和设置运算符,那么CD团队已经优化了这些访问模式。它们非常高效。

安德鲁