0

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

Core Data 为托管对象类动态生成高效的公共和原始 get 和 set 属性访问器方法和关系访问器方法。

...

原始访问器方法类似于“普通”或公共键值编码兼容访问器方法,只是 Core Data 使用它们作为访问数据的最基本数据方法,因此它们不发出键值访问或观察通知。换句话说,它们对于primitiveValueForKey: 和setPrimitiveValue:forKey: 什么公共访问器方法对于valueForKey: 和setValue:forKey:。

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

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

4

1 回答 1

1

edelaney05,

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

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

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

安德鲁

于 2012-12-21T12:24:24.223 回答