我有一些數據由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