Ios 保存NSManagedObjectContext的最佳实践

Ios 保存NSManagedObjectContext的最佳实践,ios,core-data,Ios,Core Data,就频率而言,保存NSManagedObjectContext的最佳实践是什么?仅在应用程序切换到后台或即将终止时进行保存是否足够?假设托管对象的正常语义不受保存频率(从内存到SQLite)的影响是否正确 (另一方面,编辑指出该问题“似乎是主观的,很可能会被关闭”,但该网站还包含关于核心数据最佳实践的其他问题,因此我希望可以。)您应该将其保存在应用程序的关键点。例如,如果您有一个要修改NSManagedObject的屏幕,并且您还需要一个cancelChangesButton,则您希望在进入该屏幕

就频率而言,保存
NSManagedObjectContext
的最佳实践是什么?仅在应用程序切换到后台或即将终止时进行保存是否足够?假设托管对象的正常语义不受保存频率(从内存到SQLite)的影响是否正确


(另一方面,编辑指出该问题“似乎是主观的,很可能会被关闭”,但该网站还包含关于核心数据最佳实践的其他问题,因此我希望可以。)

您应该将其保存在应用程序的关键点。例如,如果您有一个要修改
NSManagedObject
的屏幕,并且您还需要一个
cancelChangesButton
,则您希望在进入该屏幕时保存您的
NSManagedObjectContext
,因此,您可以对其调用
undo
,并放弃在此屏幕上所做的所有更改


基本上,如果您没有在一个周期内进行某种处理(
for
while
…),则在使用完
NSManagedObject后应该保存。但是,如果您这样做,您应该在退出循环后保存,不要在每次循环中都调用save,否则可能会减慢应用程序的速度。

同时我注意到,在删除属于对多反向关系的托管对象时,保存也很方便/有用。仅当保存其托管对象上下文时,才会从表示关系的集合中删除该对象

在此之前,集合仍然包含已删除的对象(如果标记为删除),因此集合的
计数
会产生意外结果(因为它仍然包含已删除的对象),并且关系中的索引(如果是有序的)也会按相应的数量关闭


总的来说,在这种情况下,调用
save:
似乎比在各个点执行特殊计数和索引计算要简单得多。

老实说,当我使用过它,并且在一个下载量接近100万的应用程序中,它在对象完成操作后立即被保存。你在保存上下文时是否有谨慎的理由?你是在一次发布大量信息吗?或者您正在试图避免大量的
[上下文保存:&error]
调用?@LyricalPanda这是第二个(许多调用)。