ios核心数据如何实现sql事务功能?
Posted
技术标签:
【中文标题】ios核心数据如何实现sql事务功能?【英文标题】:ios core data how to implement the sql transaction function? 【发布时间】:2012-03-16 07:05:07 【问题描述】:喜欢标题。我使用核心数据插入项目,我插入 100 个项目,它太慢了。如何提高插入速度? Core Data 哪个有事务功能?
【问题讨论】:
你能告诉我们你是如何创建你的项目的吗? 【参考方案1】:[[<#NSManagedObjectContext#> undoManager] beginUndoGrouping];
... do some data modifications ....
[[<#NSManagedObjectContext#> undoManager] endUndoGrouping];
[[<#NSManagedObjectContext#> undoManager] undo]; // rollback
...
【讨论】:
【参考方案2】:您正在寻找的是在插入所有 100 个对象之后而不是在每次插入之后在 Core Data 中 save
。
当对象被插入到 Core Data 中时,它们只存在于内存中。要将新对象持久保存到磁盘,您应该保存它将进行所有更改(插入、更新和删除)并将它们一起写入磁盘。
如果您查看the documentation for -insertObject(如下),您会了解到插入对象只会在保存更改时注册要插入的对象。
插入对象:
注册一个对象,以便在下次保存更改时插入到接收者的持久存储中。
- (void)insertObject:(NSManagedObject *)object
参数
对象
一个托管对象。
通过进一步查看the documentation for -save:(如下),您会发现它将(尝试)保存所有未保存的更改,在您的情况下是所有 100 个插入的项目。
保存:
尝试将对已注册对象的未保存更改提交到其持久存储区。
- (BOOL)save:(NSError **)error
参数
错误
指向
NSError
对象的指针。您不需要创建NSError
对象。如果您通过NULL
,则保存操作在第一次失败后中止。返回值
如果保存成功则
YES
,否则NO
。
【讨论】:
这也很慢,因为交易的速度增加丢失了。无论如何要修改它?以上是关于ios核心数据如何实现sql事务功能?的主要内容,如果未能解决你的问题,请参考以下文章
数据库原理 - 序列3 - 事务是如何实现的? - Redo Log解析