CoreData实体结构:
Invoice <---->> Invoiceline <<-----> Product
NSManaged对象类实现
// intended to be overridden by the subclass
class var entityName { /* return the entity name */ }
// generic class function to create new entity
class func create() -> NSManagedObject
{
let context = // the main context
let record = NSEntityDescription.insertNewObjectForEntityForName(self.entityName, inManagedObjectContext: context)
return record
}
示例交易:
let product = // a product object
let invoice = Invoice.create() as! Invoice
let invoiceLine = InvoiceLine.create() as! InvoiceLine
invoiceLine.product = product
invoiceLine.invoice = invoice
// complete the transaction
invoice.checktout()
当coredata中插入的发票数达到200K时,设置invoiceLine's
product
属性需要的时间太长:
invoiceLine.product = product
所以,我使用XCode工具来检查内存分配,我发现每次invoiceLine.product = product
时,coredata都会为invoiceLines
加载所有相关的product
,在我的情况下为6K invoiceLines
的{{1}},所以当我将另一个product
与invoiceLine
相关联时,它将再次加载该特定invoiceLine
的所有相关product
,最终内存分配得到越来越大。
问题:当我执行此操作时,是否可以阻止coredata加载invoiceLine
的所有相关product
?{/ 1>?
答案 0 :(得分:0)
我不知道这是不是一个好习惯,但我设法通过切断product
到invoiceline
的反向关系来缩短执行时间:
invoiceLine ----> product
这一次,CoreData没有理由为我不需要的特定invoiceline
加载所有相关的product
,从而提升效果。