有关NSUserDefaults的问题/问题

Dr.*_*eon 6 macos cocoa objective-c nsuserdefaults

好吧,我承认NSUserDefaults,作为一个特定于Mac的东西(我在过去几年里我是一名Mac程序员),这是我没有深入研究过的事情之一......所以这里有一些问题/问题我我遇到过:

我明白这NSUserDefaults基本上是一个NSMutableDictionary写的.plist.

我的问题:

  1. 鉴于我运行OS X 10.7(狮子),并已经启用了沙盒,这里是我的应用程序的.plist文件中?(我在两者中搜索~/Library/Preferences/com.example.myapp.plist,~/Library/Containers/com.example.myapp/Data/Library/Preferences/com.example.myapp.plist但这些似乎都没有

  2. 我知道这个.plist文件是在应用程序第一次启动时创建的,对吗?

  3. registerDefaults:将在应用程序启动时使用(例如,在awakeFromNib)并提供立即存储在.plist文件中的默认值字典,并且只有在某个点设置了不同的值时才更改,是否正确?

  4. 当我们设置一个特定的键值对时,该对是否会自动立即保存到.plist文件中?如果是这样,我们为什么/何时使用synchronize?(每次使用它时某些值设置为过度杀伤,还是应该为特殊情况保留?)


旁注:我希望没有人抱怨我使用osx标签.但是,我真的厌倦了看到Cocoa Touch/iOS相关的答案(我的(主要))与OSX相关的问题.那么,你在...... :-)


编辑:有关该主题的一些非常有用的见解,请查看接受的答案以及下面的评论.

Ano*_*dya 3

回答 1. Lion 中的主目录是隐藏的,因此您无法输入路径(如果没有看到文件夹,则无法从 Finder 进入该文件夹内部)。您可以使用路径查找器在隐藏目录中移动。

回答 2.并非总是如此。单个应用程序中可以有多个 plist。很少是在第一次启动时创建的,很少是在某些特定操作中创建的。实际上这取决于 plist 文件何时创建以及如何使用它。

答案 3. registerDefaults:当用户没有为该属性设置其他值时,会注册默认值。稍后打开应用程序时,它不会覆盖用户存储的任何内容。您可以在任何地方使用它,但如上所述,它只会使用一次。

答案 4.对于 Mac OSX 应用程序,不存在性能和过度杀伤问题,但对于 iOS 则有。使用总是更好[[NSUserDefaults standardUserDefaults] synchronize];