NSUserDefaults是单例类。
单例类:是单例模式的一个实例,而模式单例是一种常见的编程方式。在iOS中,单例模式很常见,它用于确保特定类只有一个实例。单例最常用于表示硬件或者操作系统向应用程序提供的服务。
NSUserDefaults和对象归档
NSUerDefaults类提供了一个默认的 系统编程接口进行交互,可以说是最简单的存储方式之一,一般用来存储应用程序相关的偏好设置,配置数据等,以便于下次启动程序之后能恢复上次的设置。而且它可以在程序的任何地方存储和读取数据。在运行时,可以使用NSUerDefaults对象读取应用程序的默认数据库来获取数据。NSUerDefaults具有缓存机制,所以不必再每次读取数据的时候都打开应用程序的默认设置数据库。可以通过synchronize方法来使内存中的缓存与系统默认数据库进行同步。
NSUerDefaults有限制,他一般用于存储单条数据,比如程序设置信息,而大量的条目数据一般使用数据库,大文件的数据则使用文件存储方式。
对象归档(NSKeyedArchiver)是将内存中的对象实例保存成磁盘并且可以逆向这个过程以保存用户操作状态等,他的用处很大,但是用起来比较麻烦,需要在程序设计的时候就把每个类实现NSCoding协议功能。
可以通过NSUerDefaults单例来创建一个NSUerDefaults对象,给对象是全局变量,可以在整个项目中使用。代码如下:
var uerDefaults = NSUerDefaults.standardUserDefaults()
也可以通过初试化方法init?(suiteName suitename: String)
来创建一个新的NSUSerDefaults对象,参数suitename代表对象的组名称
var userDefaults = NSUserDefaults(suiteName: "SwiftClass")
NSUserDefaults类提供了一些非常方便的方法来设置和获取常用的数据类型,例如Int,Float,Double,Bool,NSURL。具体使用:
//Int类型 //设置 userDefaults.setInteger(123456,forKey:"Int") //读取 var intValue = userDefaults.integerForKey("Int") //Float 类型 //设置 userDefaults.setFloat(3.2,forKey:"Float") //读取 var floatValue = userDefaults.floatForKey("Float") //Double类型 //设置 userDefaults.setDouble(5.6890,forKey:"Double") //读取 var doubleVaule = userDefaults.doubleForKey("Double") //Bool类型 //设置 userDefaults.setBool(true,forKey:"Boole") //读取 var boolValue= userDefaults.boolForKey("Boole") //NSURL类型 //设置 userDefaults.setURL(NSURL(string:"http://dowhile.net"),forKey:"NSURL") //读取 var urlValue = userDefaults.URLForKey("NSURL")
如果想要删除NSUserDefaults实例对象所有设置的值,我们需要获取到所有的Key,然后使用removeObjectForyKey方法进行遍历删除。
var ar:NSDictionary = userDefaults.dictionaryRepresentation() for key in ar.allKeys{ userDefaults.removeObjectForKey(key as String) userDefaults.synchronize()//内存中数据同步更新数据库 }
你也许会有疑问,这些数据到底存储在了那里呢?
其实它存储在应用程序内置的一个plist文件里,这个可以根据路径看到。
比如说这个是你的程序沙盒位置
/UsersLibrary/Application Support/iPhoneSimulator/4.1/Applicati*/29788E40-AF47-45A0-8E92-3AC0F501B7F4/,(这个是应用程序对应在mac上的位置)
在你的/Library/Prefereces,里面有个plist文件,存储的就是你的userDefaults