NSUserDefaults 是苹果为开发者提供的一个较轻量级的数据存储工具,他支持的存储类型包括NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary。但是如果在NSArray或NSDictionary中存在自定义的对象,就会出现错误,这时候需要将自定义的对象转换为NSData然后存入就不会出现问题了。NSUserDefaults作为存储使用所以以单例方式出现。使用NSUserDefaults来存储一些简单的数据十分的方便而且效率也比较快。
我们先来看看一般的操作
<span style="font-size:18px;">//设置当前标题
[[NSUserDefaults standardUserDefaults] setValue:@"Title" forKey:@“CurrentTitle”];
//获得当前标题
[[NSUserDefaults standardUserDefaults] objectForKey:@"CurrentTitle“];</span>
如果你要存储自定义的对象,可以使用<NSCoding>协议中的 - (id) initWithCoder: (NSCoder *)coder方法(对属性编码)和- (void) encodeWithCoder: (NSCoder *)coder方法(对属性解码)
</pre><pre name="code" class="objc"><span style="font-size:18px;"></span>
<span style="font-size:18px;">@interface Person: NSObject<NSCoding>
{
NSStirng *name;
NSInteger age;
}
@property (nonatomic, Strong)NSString *name;
@property (nonatomic, assign) NSInteger age;
@end
#import "CMLotteryTicket.h"
@implementation CMLotteryTicket
@synthesize name;
@synthesize age;
//将对象编码(序列化)
- (void)encodeWithCoder:(NSCoder *)aDecoder
{
[aDecoder encodeInt:name forKey:@"name"];
[aDecoder encodeInt:age forKey:@"age"];
}
//将对象解码(反序列化)
- (id)initWithCoder:(NSCoder *)aCoder
{
if (self = [super init]) {
m_ltid = [aCoder decodeIntForKey:@"name"];
m_kktype = [aCoder decodeIntForKey:@"name"];
}
return self;
}
@end
Person *person = [[Person alloc] init];
person.age = 15;
person.name = @"lilei";
[[NSUserDefaults standardUserDefaults] setValue:person forKey:@“lilei”];
[[NSUserDefaults standardUserDefaults] objectForKey:@"lilei“];</span>
<span style="font-size:18px;"></span>
<span style="font-size:14px;"></span><pre name="code" class="objc"><span style="font-family: Arial;"></span>