数据存储面试要点

NSUserDefaults

使用场景

  • NSUserDefaults一般用来存储一些简单的App配置。比如存储用户姓名、uid这类轻量的数据。
  • 用于处于同一App group不同App之间共享数据,用户extension和宿主App之间共享数据。
  • 一般通过调用如下方法实现增删改查功能
- (void)setObject:(nullable id)value forKey:(NSString *)defaultName; //设置defaultName对应的值为value,如果存在defaultName,则执行更新操作,否则执行增加操作
- (nullable id)objectForKey:(NSString *)defaultName; //查询defaultName对应的值,没有返回nil
- (void)removeObjectForKey:(NSString *)defaultName; //删除defaultName对应的指
  • NSUserDefaults不能存储自定义Model。

封装NSUserDefaults

  • 在项目中,我们一般会建一个UserDefaults管理类,用来管理存储NSUserDefaults。比如建立一个AppUserDefaultsMgr类
@interface AppUserDefaultsMgr : NSObject

+ (instancetype)sharedInstance;

@property (nonatomic, copy)NSString* name; //通过@dynamic自定义setter和getter
@property (nonatomic, copy)NSString* uid; //通过@dynamic自定义setter和getter

@end

@dynamic name; 
@dynamic uid;

@implementation AppUserDefaultsMgr

+ (instancetype)sharedInstance{

    static id  s_singleton = nil;

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        s_singleton = [[[self class] alloc] init];
    });

    return s_singleton;
}

- (NSString*)name{

    return [NSUserDefaults stringForKey:@"name"];
}

- (NSString*)setName:(NSString*)name{

    return [NSUserDefaults setObject:name forKey:@"name"];
}

- (NSString*)uid{

    return [NSUserDefaults stringForKey:@"uid"];
}

- (NSString*)setUid:(NSString*)uid{

    return [NSUserDefaults setObject:uid forKey:@"uid"];
}

然后业务方如下调用:

[AppUserDefaultsMgr sharedInstance].name = @"akon";
NSLog(@"name", [AppUserDefaultsMgr.sharedInstance].name);
top Created with Sketch.