具体来说NSUserDefaults
是iOS系统提供的一个单例类(iOS提供了若干个单例类),通过类方法standardUserDefaults
可以获取NSUserDefaults
单例
常见到的轻量级的储存,NSUserDefaults
单例以key-value
的形式存储了一系列偏好设置,key
是名称,value
是相应的数据。存/取数据时可以使用方法objectForKey:
和setObject:forKey:
来把对象存储到相应的plist
文件中,或者读取,既然是plist
文件,那么对象的类型则必须是plist
文件可以存储的类型,正如官方文档中提到的——
NSData
NSString
NSNumber
NSDate
NSArray
NSDictionary
比比方说登录时候的返回值,要保存这些数据,以便于各个模块的时候运用
NSUserDefaults *loginData = [NSUserDefaultsstandardUserDefaults];
[loginDatasetObject:mode.IDforKey:@"loginID"];
[loginDatasetObject:mode.iconUrlforKey:@"loginIcon"];
[loginDatasetObject:mode.accountforKey:@"loginAccount"];
[loginDatasetObject:mode.usernameforKey:@"loginName"];
而读取的时候直接拿出来就行了,
NSUserDefaults *loginData = [NSUserDefaultsstandardUserDefaults];
cell.detailTextLabel.text = [loginDataobjectForKey:@"loginName"];
非常方便
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *firstName = [defaults objectForKey:@"firstName"]
NSInteger age = [defaults integerForKey:@"Age"];
NSData *imageData = [defaults dataForKey:@"image"];
UIImage *image = [UIImage imageWithData:imageData];
我们通过为三个数据设置key
的方式把NSInteger
、NSString
和UIImage
三种数据存储下来,其中图片是通过归档为NSData
的方式进行存储的,除此之外,还可以被转为NSNumber
或NSString
类型。顺便提一句,这里NSInteger
没有星号,因为NSInteger
根据系统是64位还是32位来判断自身是long
还是int
类型,并且它也不是一个标准Objective-C对象。
NSUserDefaults的清理
//方法一
// 先将其转化为字典,然后用forin遍历删除即可
NSUserDefaults *defatluts = [NSUserDefaults standardUserDefaults];
NSDictionary *dictionary = [defatluts dictionaryRepresentation];
for(NSString *key in [dictionary allKeys]){
[defatluts removeObjectForKey:key];
[defatluts synchronize];
}
//方法二
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
[[NSUserDefaults standardUserDefaults]synchronize];