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里都找不到,会从这里找。一般用来设置默认值。
  1. 监听默认值的变化
    NSUserDefaultsDidChangeNotification

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

  2. 可以存储的类型

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的内容,而这是很容易出错的,因此不要存储复杂的东西。最好是存储简单的变量,然后根据这些个变量来生成复杂的对象。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,461评论 19 139
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 14,187评论 2 33
  • 关于首选项和设置 首选项是您持久存储的信息,并用于配置您的应用程序。应用程序通常会向用户公开偏好设置,以便他们自定...
    nicedayCoco阅读 4,655评论 0 0
  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 11,509评论 0 6
  • 姓名;枯安 性别;男 年龄;2200;表面年龄:22 种族;恶魔 外貌;黑色的头发算长散落刚好到背部不过一般都会被...
    羽翼未青芒阅读 1,378评论 0 0