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

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

最新文章

  1. 《JS实现复制内容到剪贴板功能,可兼容所有PC浏览器,不兼容手机端》
  2. http状态代码-转载
  3. 关于SMBIOS
  4. (转)The Neural Network Zoo
  5. 基于Oracle的Mybatis 批量插入
  6. 关于C#和ASP.NET中对App.config和Web.config文件里的[appSettings]和[connectionStrings]节点进行新增、修改、删除和读取相关的操作
  7. ThinkPhp学习01
  8. SOM聚类与Voroni图在验证码字符分割中的应用
  9. ReactiveSwift源码解析(六) SignalProtocol的take(first)与collect()延展实现
  10. 抖音、YouTube、Facebook等新媒体营销与运营相关14本书
  11. redis远程连接报错记录
  12. 理解R语言gdistance包下的transition函数
  13. iOS开发简记(7):网络请求模块
  14. Netty实现简单WebSocket服务器
  15. shh和maven项目报错
  16. 第二十六课 典型问题分析(Bugfix)
  17. 01炼数成金TensorFlow基本概念
  18. 百度编辑器UEditor源码模式下过滤div/style等html标签
  19. 实习第一天:try和catch的使用
  20. C#学习笔记(基础知识回顾)之值类型和引用类型

热门文章

  1. [转]C#压缩打包文件
  2. 小记sql server临时表与表变量的区别
  3. lecture8-RNN的训练方法之二三
  4. 【分布式协调器】Paxos的工程实现-Cocklebur状态转移
  5. T-SQL 查询、修改数据表
  6. Android开发自学笔记(Android Studio1.3.1)&mdash;2.开始第一个Android应用
  7. Beyond Compare 3 设置自动换行
  8. winddows 运行指令 (2)
  9. The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path。
  10. iOS的TCP/IP协议族剖析&amp;&amp;Socket