ios - NSUserDefaults initWithSuiteName 在删除应用程序后仍然存在

标签 ios objective-c cocoa-touch nsuserdefaults

我有一个问题,如果我使用 [[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/

相关文章:

ios - 正确管理 NSURLSession 的建议

ios - 使用 CGContextRef 设置上下文

objective-c - 使用与属性名称不同的键从 NSDictionary 设置对象的属性

ios - 出乎意料地发现 nil,即使在展开之后

ios - 如何根据键的值计算数组中的键总数

objective-c - 把很长的 NSString 剪掉一部分

objective-c - IOS FacebooSDK 3.0 模式 viewController 中的 FBLoginVIew

Windows 10 中的 iOS XPC 模拟

objective-c - 程序内存的内容 (Mac)

iphone - 如何制作一个 iPhone 下拉式按钮