NSUserDefault 是用来存用户配置信息,可以用来临时存一些应用数据. 在应用不删除的情况下,会一直存在.如果key 相同则会覆盖.
基本用法:
[[
NSUserDefaults
standardUserDefaults
]
setObject
:
@"testValue"
forKey
:
@"test"
];
NSLog(@"Test is %@", [[NSUserDefaultsstandardUserDefaults]objectForKey:@"test"]);
|
利用NSUserDefault 来存自定义对象:
因为NSUserDefault 只能储存基本数据类型,所以当我们自定义自己的类的时候 不用NSUserDefault 直接来储存. 此时需要实现NSCoding 协议,这个协议只是用来decode 和 encode 的(也就是转码/反转码). 通过 NSKeyedArchiver 和 NSKeyedUnArchiver 可以把NSData 与 类之间相互转换. 主要思想就是这样.
自定义类 h 文件
#import
<Foundation/Foundation.h>
@interface Student : NSObject < NSCoding > @property ( nonatomic , strong ) NSString *name; @property ( nonatomic , strong ) NSString *text;
@end
|
自定义类 m 文件
#import
"Student.h"
#define NAME @ "name" #define TEXT @ "text" @implementation Student - ( void )encodeWithCoder:( NSCoder *)aCoder{ [aCoder encodeObject : self . name forKey : NAME ]; [aCoder encodeObject : self . text forKey : TEXT ]; } - ( id )initWithCoder:( NSCoder *)decoder{ if ( self = [ super init ]) { if (decoder == nil ) { return self ; } self . name = [decoder decodeObjectForKey : NAME ]; self . text = [decoder decodeObjectForKey : TEXT ]; } return self ; }
@end
|
NSUserDefault 存储与读取
Student
*testStu = [[
Student
alloc
]
init
];
testStu. name = @"testname" ; testStu. text = @"testtext" ; NSData *data = [ NSKeyedArchiver archivedDataWithRootObject :testStu]; [[ NSUserDefaults standardUserDefaults ] setObject :data forKey : @"student" ]; NSData *deData = [[ NSUserDefaults standardUserDefaults ] objectForKey : @"student" ]; Student *deStu = [ NSKeyedUnarchiver unarchiveObjectWithData :deData];
NSLog(@"name is %@", deStu.name);
|
—完