pix*_*eak 13 iphone core-data objective-c ipad ios
据我所知,使用Transformable数据类型是在Core Data中存储数组或任何自定义对象的简便方法.我想知道什么时候不应该使用Transformable,而应该创建另一个实体并使用To-many关系.
假设它是一个字符串数组,是否有最大数量的元素或字符串的最大长度会导致严重的性能问题?
Tec*_*Zen 15
我想知道什么时候不应该使用Transformable,而应该创建另一个实体并使用To-many关系.
您绝对必须使用可变形属性.在某些情况下,它们不是方便或捷径,而是资源密集型的必需品.
您很少使用Core Data来存储数组或字典之类的数据结构,因为Core Data主要用于存储/持久性,而不是用于建模/模拟.对数据建模来说,将数据结构变成一个无逻辑的大型数据博客是没用的.
可转换属性通常用于存储某些类,这些类本身主动管理它所拥有的数据,例如转换UIImage,以便您可以直接从UI存储中获取UIImage并将其全部整合回来.
回答你的主要问题:
我对数据有多大感到好奇,直到它影响性能,并且最好将它们标准化.
这主要取决于尺寸和复杂性的组合.每当您将一堆现有对象转换为数据blob时,您必须通过转换来阅读整个博客.因此,如果通过变换存储1mb数组,则在运行反向变换时会在内存中返回1mb数组.每次转换,无论多小,都比访问普通属性或甚至找到另一个托管对象需要更多的处理时间.因此,经常访问的大量小变换也会导致相当大的性能损失.
它总是更好的数据的大块分解成实体,属性和关系.这样做可以免费为您提供Core Data的所有灵活性和优化.我发现自己使用Core Data代替数组和字典,因为一旦你真正围绕Core Data,它就更容易使用.
我永远不会使用Core Data来存储转换后的字符串数组等.如果字符串没有逻辑并且只有几十个字符串,那么您也可以将数组写入plist文件.它比使用可转换属性更快捷,更容易.
它实际上取决于您希望如何使用transformable属性描述的数据.
Core Data将在您的SQLite数据库中创建一个blob列,因此几乎不可能对该属性进行任何类型的实际搜索或排序.
相反,使用逻辑实体(通过多对多关系)描述要存储的数据将允许您使用搜索和排序功能.
该实体还有另一个关键优势,即它可以延迟加载,具有可转换属性,您的应用程序将消耗每次对象出错时加载该数据的成本.如果您将一组对象编码为可转换属性,则在将数据从磁盘上准备好时,即使您不需要它,也可能导致严重的性能问题.
就尺寸而言,你可以在blob中保存尽可能多的数据,它是无限的.这再次归结为这种设计的性能影响,其中(特别是在iOS设备上)I/O非常昂贵并且内存受限制您的应用程序可能根本无法将数据读出存储区并进入内存(人们曾经尝试过在CoreData SQLite商店中贴电影.
归档时间: |
|
查看次数: |
7592 次 |
最近记录: |