我有一些数据包含 2 个表的记录:对和项目。这些表通过多对多关系链接。我看到了 2 种可能的方法来填充核心数据实体。让我们已经填写了所有项目,现在我们应该填写对。在这两种情况下,“标识符”都是附加的文本属性/字段。
方式 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]
。
正如我所见,第二种方式比第一种方式工作得快得多。但它有什么隐藏的缺点吗?例如,将项目保存到附加字典不会浪费内存吗?