哪些NSUserDefaults存储在El Capitan?

时间:2016-09-12 20:37:01

标签: nsuserdefaults

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

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

当我通过Xcode运行应用程序时,我仍然在查询NSUserDefauls时获得之前运行的值。在世界的哪个地方存储这个???

1 个答案:

答案 0 :(得分:1)

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

如果要删除prefs,请在终端中使用defaults,如下所示

# defaults delete com.gargoylesoft.DTS-macOS

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

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

~/Library/Preferences

而sandoxed将它们存储在

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

defaults将始终在适当的位置查看。

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