有关NSUserDefaults的问题/问题

时间:2013-02-25 08:20:03

标签: objective-c macos cocoa nsuserdefaults

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

我了解NSUserDefaults基本上是NSMutableDictionary,写成.plist

我的问题:

  1. 鉴于我正在运行OS X 10.7(Lion)并启用了Sandbox,其中是我应用的.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? (每次使用它时某些值设置为过度杀伤,还是应该为特殊情况保留?)


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


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

1 个答案:

答案 0 :(得分:3)

答案1。主目录隐藏在Lion中,因此您无法输入路径(无法查看无法从Finder中输入文件夹内的文件夹)。您可以使用Path Finder移动隐藏目录。

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

回答3. registerDefaults:寄存器默认值是指用户未为该属性设置其他值。当以后打开应用程序时,它不会覆盖用户存储的内容。您可以在任何地方使用它,但如上所述,它将被使用一次。

答案4。对于Mac OSX应用程序,没有性能和矫枉过正的问题,但是对于iOS它有。使用[[NSUserDefaults standardUserDefaults] synchronize];

总是更好