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
___________________________________________________
专注iOS/前端开发,广泛涉猎多种平台和技术,欢迎交流
可以在微博关注并@沈z伟