我有一个问题,如果我使用 [[NSUserDefaults alloc] initWithSuiteName:SUITE_NAME]]
存储任何数据,即使在删除应用程序后数据仍然存在。这是应该发生的吗?
最佳答案
这是应该发生的。这实际上是 initWithSuiteName 的目的。 , 在应用组中的所有应用之间共享数据。文档说:
Use this method in scenarios such as:
When developing an app suite, to share preferences or other data among the apps
When developing an app extension, to share preferences or other data between the extension and its containing app
应用程序无法删除它,因为当应用程序被删除时,它不会收到通知。这与将项目存储在钥匙串(keychain)中的问题相同——它们在应用程序的生命周期之后仍然存在。这可能是好事也可能是坏事,具体取决于您应用的需求。
一种解决方案是加密文件内容的适当部分并将 key 存储在共享钥匙串(keychain)中。对于这样的事情,随机的 256 位 AES 对称 key 是完美的。一般来说,只要用户在设备上有密码,文件系统就会被加密,共享存储中的项目应该被认为是干净的。
另一种选择是使用共享存储作为直通;我们在我们的应用程序套件中这样做。一个应用程序会将一个加密文件放在共享存储中,然后使用文件 URI 和加密 key 调用我们套件中的另一个应用程序。接收应用会将文件复制到其本地存储中,删除共享文件,然后解密本地文件。
关于ios - NSUserDefaults initWithSuiteName 在删除应用程序后仍然存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29783270/