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
,所以当我将另一个product
与invoiceLine
关联时,它将再次为那个特定的invoiceLine
加载所有相关的product
,最终内存分配会越来越大。问题:当我加载coredata时,是否可以阻止它加载所有相关的
invoiceLine
? 最佳答案
我不知道这是否是一个好的实践,但是我通过切断product
到invoiceline
的逆关系来减少执行时间:invoiceLine ----> product
这一次,CoreData没有理由为我不需要的特定invoiceline
加载所有相关的product
,从而提高了性能。
关于swift - Coredata:设置相关对象花费的时间太长,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41993402/