- FastCoder,能夠幫你存儲你建立的模型和基本數(shù)據(jù)類型色难,它是
NSUserDefaults
的進一步封裝。- FastCoding 減少了對自定義類時的
<NScoding>
協(xié)議書寫
需要設置:手動管理(-fno-objc-arc)
項目->Build Phases-> Compile Sources
下面類似的圖
QQ20161205-0.jpg
接下來是用單例模式來本地存儲數(shù)據(jù)
@interface Center : NSObject
+(instancetype)share;
-(void)storeValue:(id)value withKey:(NSString *)key;
-(id)valueWithKey:(NSString *)key;
#import "Center.h"
#import "FastCoder.h"
static Center *center =nil;
@implementation Center
+(instancetype)share{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
center = (Center *)@"Center"; //這是嚴格的單例模式書寫
center = [[Center alloc]init];
});
//防止子類使用
NSString *classString = NSStringFromClass([self class]);
if ([classString isEqualToString:@"Center"] == NO) {
NSParameterAssert(nil);
}
return center;
}
-(instancetype)init{
NSString *string = (NSString *)center;
if ([string isKindOfClass:[NSString class]] && [string isEqualToString:@"Center"]) {
self = [super init];
if (self) {}
return self;
}else{
return nil;
}
}
-(void)storeValue:(id)value withKey:(NSString *)key{
NSParameterAssert(value); //如果為空,將會報錯。
NSParameterAssert(key);
NSData *data= [FastCoder dataWithRootObject:value];//FastCoder 的內(nèi)容
if (data) {
[[NSUserDefaults standardUserDefaults]setObject:data forKey:key];
}
}
-(id)valueWithKey:(NSString *)key{
NSParameterAssert(key);
NSData *data = [[NSUserDefaults standardUserDefaults]valueForKey:key];
return [FastCoder objectWithData:data];
}
使用如下:
[[Center share]storeValue:@{@"a":@"b"} withKey:@"key"];
NSLog(@"%@",[[Center share]valueWithKey:@"key"]);
進一步的封裝:
@interface NSObject (StoreValue)
-(void)storeValueWithKey:(NSString *)key;
+(id)valueBykey:(NSString *)key;
@end
#import "NSObject+StoreValue.h"
#import "Center.h"
@implementation NSObject (StoreValue)
-(void)storeValueWithKey:(NSString *)key{
[[Center share]storeValue:self withKey:key];
}
+(id)valueBykey:(NSString *)key{
return [[Center share]valueWithKey:key];
}
使用如下:
Student *student = [[Student alloc]init];
[student storeValueWithKey:@"key"];
Student *stu= [Student valueBykey:@"key"];