我知道使用 Transformable 数据类型是在 Core Data 中存储数组或任何自定义对象的一种简单方法。我想知道什么时候应该不使用 Transformable 而应该创建另一个实体并使用一对多关系。
假设它是一个字符串数组,是否存在会导致严重性能问题的最大元素数或最大字符串长度?
最佳答案
I would like to know when one should not use Transformable but should instead create another entity and use To-many relationship.
您应该只在绝对必要时才使用可转换属性。在某些情况下,它们不是便利或捷径,而是资源密集型必需品。
您很少使用 Core Data 来存储数组或字典等数据结构,因为 Core Data 主要用于建模/模拟,而不是用于存储/持久化。将数据结构变成一个大的、无逻辑的数据博客对于建模数据是没有用的。
可转换属性通常用于存储一些本身主动管理其持有的数据的类,例如转换 UIImage 以便您可以直接从 UI 存储中获取 UIImage 并将其全部取回。
回答您的主要问题:
I am more curious about how big the data can be until it affects performance and it's better to normalize them.
这主要取决于大小和复杂性的组合。每当您将一堆现有对象转换为数据 blob 时,您必须通过转换来读取整个博客。因此,如果您通过转换存储一个 1mb 的数组,则在运行反向转换时,您会在内存中得到一个 1mb 的数组。每个转换,无论多么小,都比访问普通属性或什至查找另一个托管对象花费更多的处理时间。因此,拥有大量经常访问的小转换也会对性能造成相当大的影响。
总是最好将大块数据分解为实体、属性和关系。这样做可以免费为您提供 Core Data 的所有灵 active 和优化。我发现自己使用 Core Data 代替数组和字典,因为一旦你真正了解 Core Data,它就会更容易使用。
我绝不会使用 Core Data 来存储转换后的字符串数组等。如果字符串没有逻辑,只有几十个,你还不如把数组写到 plist 文件中。与乱用可变形属性相比,它会更快、更容易。
关于iphone - 何时*不*使用 Core Data 类型 Transformable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6783091/