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

我有一个问题,如果我使用[[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中存储项目时,这是一个同样的问题 – 它们在应用程序的使用寿命之内.这可能是一个好的或坏的,取决于你的应用程序的需要.

一个解决方案是加密文件的相应部分内容,并将密钥存储在共享钥匙串中.对于像这样的一个随机的256位AES对称密钥是完美的.通常,只要用户在设备上具有密码,则文件系统被加密,共享存储中的项目应该被认为是干净的.

一个选择是使用共享存储作为传递;我们在我们的应用程序套件中执行此操作.一个应用程序将加密文件放在共享存储中,然后使用文件URI和加密密钥在我们的套件中调用一个应用程序.接收的应用程序将文件复制到本地存储器中,删除共享文件,然后解密本地文件.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...