NSUserdefault读书笔记

  1. 作用
    用来存储首选项的。本来首选项是存在磁盘上的,NSUserdefault相当于提供了一个缓存,不用每次都写文件。也就是说设置首选项以后,可以马上读出来,不必先写到磁盘中去。 定期调用synchronize方法,把内存中的数据同步到磁盘中去。在程序退出时,一定要调用这个方法。
  2. 首选项的组织
    首选项存储是有层级结构的,每一级叫做域(domain)。查找时,按照域的等级查找,如果找到了,就停止查找。
    域及域的查找顺序
    volatile是指在下次启动之后就失效了。
    • Argument Domain 就是从命令行启动时的参数啦
    • Application Domain 就是平常使用的[NSUserDefaults standardUserDefaults]管理的内容,对应的实体文件存储在$HOME/Library/Preferences/目录下,名字叫做<ApplicationBundleIdentifer>.plist,
    • The Global Domain 系统用的,APP一般用不到。比如语言啊啥的。 如果想覆盖系统设置的话,只需要在Application Domain里设置一样的key就好了。
    • The Languages Domains 不同的语言有不同的习惯,如日期的表示方法等。存在这里。
    • The Registration Domain 用来注册默认值。如果在以上所有的domain里都找不到,会从这里找。一般用来设置默认值。
  3. 监听默认值的变化
    NSUserDefaultsDidChangeNotification

    This notification is posted when a change is made to defaults in a persistent domain.

  4. 可以存储的类型

    A default object must be a property list, that is, an instance of (or for collections a combination of instances of): NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary

    持久化首选项实际上就是把要存储的内容encode到磁盘里,下次启动时在decode里。
    这就是说,新版本必须可以decode旧版本的encode的内容,而这是很容易出错的,因此不要存储复杂的东西。最好是存储简单的变量,然后根据这些个变量来生成复杂的对象。

posted on 2017-01-14 10:38  花老🐯  阅读(186)  评论(0编辑  收藏  举报

导航