【发布时间】:2012-01-23 17:39:32
【问题描述】:
我正在开发一个具有主从界面的应用程序,该界面显示用户可以深入了解的产品列表。初始化时,应用程序从 Web 服务加载(1000 多种)产品的摘要信息,并将其显示在表格视图中。当用户选择特定产品时,应用会调用 Web 服务以获取该产品的详细信息并将其显示在详细视图中。
我想使用 Core Data 框架在会话之间保留这些数据。
我可以想到两种方法来对这些数据进行建模。
- 使用包含此对象所有属性的单个核心数据实体产品。当表视图被初始化时,这些实体被填充了摘要数据。选择特定产品后,仅会为该产品填充剩余字段。
- 使用两个核心数据实体,ProductSummary 和 ProductDetail,它们之间具有摘要/详细信息关系。 ProductSummary 包含由表视图加载的属性。 ProductDetail 包含详细视图加载的属性。
每个选项的优缺点是什么?选项 1 确实看起来更容易编码,但我是否将内存使用问题存储起来以备后用?性能是否相同?
【问题讨论】:
-
过早的优化。通过将固有的
Product属性分离到不同的实体中,您的生活变得复杂。无论如何,您永远不会同时加载所有实体(或者至少不应该),并且未使用的托管对象将保留为故障,因此您应该没有内存问题。 -
@Rog 在我接受以下答案后注意到您的评论...我的
NSFetchedResultsController正在将产品以 20 个批次返回到我的视图控制器。假设我向下滚动到 1000 个列表的底部产品 - 我在任何时候都最多可以存储 20 个产品吗? -
很难确切地知道有多少会被加载到内存中,因为对象的获取和错误是在幕后自动发生的。我可以告诉你,我已经使用过使用 CoreData 获取的 4000 多个项目的表格视图,我什至没有收到内存警告。
标签: ios cocoa-touch core-data