iOS 关于本地持久化存储的探讨

时间:2023-03-09 05:42:57
iOS 关于本地持久化存储的探讨

目前,用以本地化存储的方式有很多,常用的有以下:

1.临时缓存

先说说临时缓存,临时缓存一般相当于用来管理应用程序中全局需要常用的一些内容。比如当前用户的ID或者当前的定位信息等。

常用的方式就是写一个静态变量,然后使用类方法调用。(或者单例类也行)

static NSMutableDictionary *_cacheDic;
#pragma mark - 临时缓存(退出应用后消失)
+(id)cacheValueForKey:(SCCacheKey)key{
return [[self cacheDic] valueForKey:[NSString stringWithFormat:@"%d",key]];
} +(void)setCacheValue:(id)value forKey:(SCCacheKey)key{
[[self cacheDic] setObject:value forKey:[NSString stringWithFormat:@"%d",key]];
} +(void)deleteCacheForKey:(SCCacheKey)key{
[[self cacheDic] removeObjectForKey:[NSString stringWithFormat:@"%d",key]];
}

2.本地存储NSUserdefaults,按KV存储,重启后还会存在。缺点1:只能存储NSString内容,缺点2:删除APP后会消失

#pragma mark - 字段持久缓存(保存在数据库)
+(NSString *)storeValueForKey:(SCStoreKey)key{
return [[NSUserDefaults standardUserDefaults] valueForKey:[@(key) stringValue]];
} +(void)setStoreValue:(NSString *)value forKey:(SCStoreKey)key{
[[NSUserDefaults standardUserDefaults] setObject:value forKey:[@(key) stringValue]];
[[NSUserDefaults standardUserDefaults] synchronize];
} +(void)deleteStoreValueForKey:(SCStoreKey)key{
[[NSUserDefaults standardUserDefaults] removeObjectForKey:[@(key) stringValue]];
[[NSUserDefaults standardUserDefaults] synchronize];
}

3.NSKeyedArchiver(归档),可存储自定义对象。缺点:删除APP后会消失。

#pragma mark - 对象持久缓存(保存在本地文件)
+(void)setStoreObject:(NSObject<NSCoding> *)obj forKey:(SCObjectKey)key{
NSString *path=[SCSysconfig filePathByName:[NSString stringWithFormat:@"%d.domain",key]];
[NSKeyedArchiver archiveRootObject:obj toFile:path];
} +(NSObject<NSCoding> *)storeObjectForKey:(SCObjectKey)key{
NSString *path=[SCSysconfig filePathByName:[NSString stringWithFormat:@"%d.domain",key]];
NSObject<NSCoding> *obj=[NSKeyedUnarchiver unarchiveObjectWithFile:path];
return obj;
} +(void)deleteStoreObjectForKey:(SCObjectKey)key{
NSString *path=[SCSysconfig filePathByName:[NSString stringWithFormat:@"%d.domain",key]];
[SCFileOper removeFile:path];
}

NSKeyedArchiver的使用方法可以参考这篇博客:http://www.cnblogs.com/xiaobaizhu/p/4011332.html

4.KeyChain的使用,删除APP后,重新安装还存在。(只要BoundleID一致)

Keychain即钥匙串,是用以在应用删除后还可以保存数据的一种方法。它的存储和应用的BoundleID有关。比如百度贴吧就实现了在应用删除后,再重新安装,如果Token还是有效的话,无需再登陆。

Keychain的使用官方接口略烦,一般采用第三方库,具体可以参考我的博客:http://www.cnblogs.com/rayshen/p/4671477.html

Demo:https://github.com/rayshen/LocalDataDemo