托管对象上下文保存和refreshObject之间有什么区别:mergeChanges:

Dev*_*fly 4 iphone cocoa-touch core-data nsmanagedobjectcontext

你好,有什么区别

  [self.context refreshObject:site mergeChanges:YES];
Run Code Online (Sandbox Code Playgroud)

  [self.context save:nil];
Run Code Online (Sandbox Code Playgroud)

有时我会同时使用它们,有时我只使用它们save.它适用于两种情况.

Lil*_*ard 8

-save:保存您在上下文中对任何托管对象所做的更改.这意味着它们被刷新到持久性存储协调器,然后持久性存储协调器将它们写入持久性存储,将其写入磁盘(假设磁盘支持的存储).

另一方面,-refreshObject:mergeChanges:做了一些完全不同的事情.它读取所述物体的从持久存储协调器的当前状态(其从持久存储中读取,等等).传递YESmergeChanges方式保留任何本地修改的对象不变,只更新没有改变的字段.这几乎与之相反-save:.

作为一个简单的思想实验,如果您运行-save:然后终止您的应用,则在下次启动时,您的修改后的数据仍然可用.如果您运行-refreshObject:mergeChanges:然后终止您的应用,您的任何本地更改都将丢失.