Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如果手机在同步之前死亡,nsuserdefault数据会发生什么情况_Ios_Objective C_Cocoa Touch_Nsuserdefaults - Fatal编程技术网

Ios 如果手机在同步之前死亡,nsuserdefault数据会发生什么情况

Ios 如果手机在同步之前死亡,nsuserdefault数据会发生什么情况,ios,objective-c,cocoa-touch,nsuserdefaults,Ios,Objective C,Cocoa Touch,Nsuserdefaults,假设我正在NSUserDefaults中保存一个用户的数据,而该用户的手机在我可以同步数据之前就挂断了。会发生什么?所有的数据都丢失了吗?它是否以某种方式保留?当您使用NSUserDefaults为键设置值时,数据首先保存在内存中NSUserDefaults定期将更改写入磁盘(使其持久化),或者如果您不能等待(例如,如果您的应用程序即将退出),可以调用synchronize 如果在应用程序崩溃或手机死机之前未调用synchronize(自动或由您调用),则新数据将永远不会写入磁盘,并将丢失。在N

假设我正在NSUserDefaults中保存一个用户的数据,而该用户的手机在我可以同步数据之前就挂断了。会发生什么?所有的数据都丢失了吗?它是否以某种方式保留?

当您使用
NSUserDefaults
为键设置值时,数据首先保存在内存中
NSUserDefaults
定期将更改写入磁盘(使其持久化),或者如果您不能等待(例如,如果您的应用程序即将退出),可以调用
synchronize


如果在应用程序崩溃或手机死机之前未调用
synchronize
(自动或由您调用),则新数据将永远不会写入磁盘,并将丢失。

在NSUserDefaults中,您不应保存大量数据,而应立即保存并同步。这是一个非常快速的操作,所以你不应该真的担心丢失用户数据。如果你试图保存大量的数据,你应该考虑把它保存在其他地方(文件系统,核心数据)。你能告诉我它是如何自动写的吗?只是为了理解,文档中没有详细说明这一点。它只声明更改是“定期”持久的。但是你自己测试一下是很容易的。只需一直尝试更改设置,并观察用户默认plist文件的更改间隔。但无论如何,您通常应该自己调用synchronize。这是安全的方法。如果您一次编辑了很多设置,那么最后需要调用synchronize一次。通过这种方式,您可以避免由于崩溃而丢失设置(当然,崩溃总是很糟糕的,但至少您的用户不应该因此而丢失其设置)。当前,在iOS上的“设置”调用大约10秒后,以及在OSX上的7到14秒之间,称为同步