NSUserDefaults 存储在 El Capitan 的什么地方?

Where are NSUserDefaults stored on El Capitan?

在我的 Mac XCode 项目中,我有一个包标识符 "com.gargoylesoft.DTS-macOS"。我试图清除该用户存储的默认设置,所以我这样做了:

find ~ -name 'com.gargoylesoft.D*' -exec rm -rf {} \;

当我然后 运行 应用程序时,通过 Xcode,当我查询 NSUserDefauls 时,我仍然从以前的 运行 中获取值。它在世界上哪里存储这个???

切勿直接在 macOS 上删除(或编辑)首选项文件! macOS 使用名为 cfprefsd 的后台守护进程缓存首选项。守护进程不会注意到您删除(或更改)文件,它会在 RAM 中保留一个缓存副本,只有当您的系统出现内存压力时它才会过期。内存压力意味着:应用程序需要 RAM 但没有未使用的 RAM 可用,然后系统发出内存压力信号,导致所有类型的系统服务刷新其缓存,因为这仍然比交换到磁盘更好(也可以在您自己的应用程序中使用,只是尝试在缓存数据时始终使用 NSCache,因为它会自动对内存压力做出反应。

如果你想删除首选项,在终端中使用defaults,像这样

# defaults delete com.gargoylesoft.DTS-macOS

这将删除该文件并确保 cfprefsd 刷新该文件的缓存。

defaults 的另一个优点是您也不需要知道应用程序是否被沙盒化,因为普通应用程序将其首选项存储在

~/Library/Preferences

而经过沙氧处理的将它们存储在

~/Library/Containers/BUNDLE_ID/Data/Library/Preferences/

但是defaults总会在合适的地方寻找。

一旦你手动删除了一个 pref 文件,你需要杀掉你的用户 cfprefsd(注意,一个给你的用户,一个给 root - 你不想杀掉 root 用户,如果这些是用户设置)然后系统应该为您重新启动它。或者只是重新启动或至少注销并重新登录,两者都会重新启动它。