Objective c 核心数据NSManagedObject:最大属性数?

Objective c 核心数据NSManagedObject:最大属性数?,objective-c,macos,cocoa,core-data,Objective C,Macos,Cocoa,Core Data,我想知道,对于任何NSManagedObject子类应该具有的最大属性数,是否有一个指导原则。我仔细阅读了苹果公司的文档,但没有发现任何性能开始下降的限制 我确实在Xcode中看到了一个编译器标志选项,当NSManagedObject的属性超过100个时,它会提供一个警告,但我找不到任何关于它的文档。这里有没有人有过使用具有大量属性的核心数据MOs的经验 我关注的是性能,而不是内存使用。在我的应用程序中,只有大约10-20个具有大量属性的MO实例,而且我是在OSX而不是iOS上开发的,所以内存使

我想知道,对于任何NSManagedObject子类应该具有的最大属性数,是否有一个指导原则。我仔细阅读了苹果公司的文档,但没有发现任何性能开始下降的限制

我确实在Xcode中看到了一个编译器标志选项,当NSManagedObject的属性超过100个时,它会提供一个警告,但我找不到任何关于它的文档。这里有没有人有过使用具有大量属性的核心数据MOs的经验

我关注的是性能,而不是内存使用。在我的应用程序中,只有大约10-20个具有大量属性的MO实例,而且我是在OSX而不是iOS上开发的,所以内存使用不是一个因素。但是,如果有一点性能(特别是当出现故障时)开始下降,我想现在就知道,这样我就可以相应地更改数据模型的结构


谢谢

即使在iOS上我也没有遇到过。性能的最大限制因素是
NSPersistentStoreCoordinator
中的缓存大小,它在Mac OSX上相当大

如果您的属性是字符串、数字、日期等(即非二进制数据),那么在您开始看到性能下降之前,您可能拥有大量属性。如果您正在使用二进制数据,那么我会提醒您不要吹高速缓存,并考虑将二进制数据存储在SQLite之外。更新版本的操作系统甚至可以自动为您执行此操作

然而,我想问你为什么要这样做。如果您使用SQLite备份存储,那么肯定有一些属性没有其他属性那么重要,可以抽象为一对一关系另一端的子实体。SQLite对您可以使用的列数有一个硬限制(默认为2000列,尽管它是编译时可配置的,所以苹果的实现可能会有所不同),并且。这很可能就是Xcode警告将其阈值设置为100的原因

关于限制的同一个链接页面还指出,有一些O(N^2)算法,其中N是列数,因此,听起来您通常应该避免使用高数字


对于其他文件格式,我不知道有任何限制或建议。但我也希望有类似的情况——例如,其中可能有一些算法是O(N^2)或更糟,因此您希望避免成为不常见的边缘情况。

谢谢。我使用XML作为后备存储,所以我不需要担心SQLite的限制。这听起来确实像是编译器标志存在的原因,这绝对是有帮助的。我预计不需要超过150个属性,所以我想我会没事的。我很感激这些链接!