我有一个CoreData数据库,里面装满了彼此相关的对象。
EntityFoo - 属性:uniqueId,relationship:与其他EntityFoo对象一对多,关系:与其他EntityUnresolvedRelationship对象一对多
EntityUnresolvedRelationship - 属性:uniqueId,inverseRelationship:返回EntityFoo对象
当我的iPhone应用程序启动时,我从Web服务获取这些对象的信息。我解析Web服务响应并创建Foo实体。当我下载并解析数据并将Foo对象放入CoreData时,我不想花时间找到需要与此对象相关的其他EntityFoo对象,而且我可能还没有如果尚未下载和解析它的Foo对象,那么我快速为关系创建一个UnresolvedRelationship对象并将uniqueId存储在其中,以便我以后可以解析该对象的关系。
现在,我试图找出最有效的方法来遍历所有Foo或UnresolvedRelationship对象,并在所有Foo对象之间创建正确的CoreData关系。换句话说,最后我想要没有UnresolvedRelationship对象......这只是暂时的... Foo对象只会彼此建立关系。
可能有15,000个Foo对象。
是否有一种很好的方法来获取所有Foo对象和所有UnresolvedRelationship对象的方式,我可以走一个数组,并通过它的uniqueId快速找到另一个数组中的匹配实体,以便我可以设置CoreData关系?
无论如何,会喜欢任何指针。
答案 0 :(得分:2)
您应该将此作为解析来自Web服务的数据的一部分。这将是最有效的方法。你接近这个的方式是你 猜测 关系查找会很慢。这是一种糟糕的优化方法。
获取对象并链接它们并不会很慢,除非你将它们实现(故障)到内存中。如果你是15K对象的错误,那么无论如何它都会变慢。
在解析时设置关系,在解析过程中有效地使用自动释放池,并在解析期间以一致的间隔重置上下文以保持内存不足。这是最好的选择。