首页 > 技术精文 > iOS > Swift开发——NSUserDefaults简介
2016
03-22

Swift开发——NSUserDefaults简介

有时候我们存储小型数据时不需要用到SQLITE,NSUserDefaults就非常适合小型数据的存储。我们来看看它的说明和用法。

NSUserDefaults是单例类。

单例类:是单例模式的一个实例,而模式单例是一种常见的编程方式。在iOS中,单例模式很常见,它用于确保特定类只有一个实例。单例最常用于表示硬件或者操作系统向应用程序提供的服务。

NSUserDefaults和对象归档

NSUerDefaults类提供了一个默认的 系统编程接口进行交互,可以说是最简单的存储方式之一,一般用来存储应用程序相关的偏好设置,配置数据等,以便于下次启动程序之后能恢复上次的设置。而且它可以在程序的任何地方存储和读取数据。在运行时,可以使用NSUerDefaults对象读取应用程序的默认数据库来获取数据。NSUerDefaults具有缓存机制,所以不必再每次读取数据的时候都打开应用程序的默认设置数据库。可以通过synchronize方法来使内存中的缓存与系统默认数据库进行同步。

NSUerDefaults有限制,他一般用于存储单条数据,比如程序设置信息,而大量的条目数据一般使用数据库,大文件的数据则使用文件存储方式。

对象归档(NSKeyedArchiver)是将内存中的对象实例保存成磁盘并且可以逆向这个过程以保存用户操作状态等,他的用处很大,但是用起来比较麻烦,需要在程序设计的时候就把每个类实现NSCoding协议功能。

可以通过NSUerDefaults单例来创建一个NSUerDefaults对象,给对象是全局变量,可以在整个项目中使用。代码如下:

var uerDefaults = NSUerDefaults.standardUserDefaults()

也可以通过初试化方法init?(suiteName suitename: String)来创建一个新的NSUSerDefaults对象,参数suitename代表对象的组名称。说白了就类似Sqlite的表名。

var userDefaults = NSUserDefaults(suiteName: "db_name")

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://www.ithtw.com"),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()//内存中数据同步更新数据库
}

 

最后编辑:
作者:小企鹅
这个作者貌似有点懒,什么都没有留下。
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

Swift开发——NSUserDefaults简介》有 1 条评论

留下一个回复