我有一些数据由2个表的记录组成:对和项目。这些表格与多对多关系相关联。我看到两种可能的方式来填补核心数据实体。让我们已经填满了所有的项目,现在我们应该填补对。在这两种情况下,“标识符”都是附加的文本属性/字段。核心数据。 NSDictionary VS NSFetchRequest?
路1(NSFetchRequest只):
//get data which should be converted to core data entities
id pairsInfoArray = ...;
for (id pairInfo in pairsInfoArray) {
//get items by identifier using NSFetchRequest
id item1 = ...;
id item2 = ...;
//create pair entity
id pair = ...;
pair.items = [NSSet setWithObjects:item1, item2, nil];
}
路2(仅一次调用NSFetchRequest和使用的NSDictionary /的NSMutableDictionary代替):
//get all items via NSFetchRequest
NSArray *itemsObjArray = ...;
//place all the items into array as key = item.identifier, value = item (as object)
NSMutableDictionary *itemsObjDict = ...;
//get data which should be converted to core data entities
id pairsInfoArray = ...;
for (id pairInfo in pairsInfoArray) {
//get items by key from itemsObjDict
id item1 = ...;
id item2 = ...;
//create pair entity
id pair = ...;
pair.items = [NSSet setWithObjects:item1, item2, nil];
}
我所有的数据(不仅是项目,对)在5分钟(路1)和45秒(路2)中填满。它包括执行[context save:nil]
的时间。
当我看到第二个工作方式比第一种快得多。但是它有什么隐藏的缺点?例如不会将项目保存到额外的字典会浪费内存?
所有项目都存储在上下文中(除了此部分数据与way2,他们另外存储在数组和字典中)。在填充数据库之前创建上下文,并在所有数据成功解析时调用save:。但是如果上下文浪费了大量的内存,那么这会浪费两种情况下的内存。 – user2083364
上下文不浪费内存,当您获取对象时使用内存。所以当你读取一个数组(这是选项2)时,你的内存使用率很高。 – Wain
谢谢你的回答。最后一个问题是如果我将手动释放数组以防止在方式2结束时浪费内存而不是autorelease数组? – user2083364