上个项目的一些反思 II
上个项目需要使用通讯录,我在回顾自己设计的时候,发现自己少设计了cache这一环.
虽然直接用SQLite在初期体验上没什么大损失,不过可以预想通讯录增长到一定数量后势必会影响体验.
单例模式,全局缓存...
//
// SingletonCache.h
// StorageDemo
//
// Created by M on 16/1/15.
// Copyright © 2016年 Meng. All rights reserved.
// #import <Foundation/Foundation.h> @interface SingletonCache : NSObject +(SingletonCache *)sharedManager;
-(id)ReadWithKey:(NSString*)Key;
-(void)LoadWithData:(id)data WithKey:(NSString*) Key;
-(void)removeCacheWithKey:(NSString*)Key;
-(void)removeAllCache; @end
//
// SingletonCache.m
// StorageDemo
//
// Created by M on 16/1/15.
// Copyright © 2016年 Meng. All rights reserved.
// #import "SingletonCache.h" @interface SingletonCache ()<NSCacheDelegate> @property(nonatomic,strong)NSCache *cache; @end @implementation SingletonCache +(SingletonCache *)sharedManager
{
static SingletonCache *SingletonCacheInstance = nil;
static dispatch_once_t predicate; dispatch_once(&predicate, ^{
SingletonCacheInstance = [[self alloc] init]; });
return SingletonCacheInstance;
} /*
可实现 NSCacheDelegate 协议 - (void)cache:(NSCache *)cache willEvictObject:(id)obj; 在系统自动清除缓存的回调,
*/ -(id)init
{
if (self = [super init]) { _cache = [[NSCache alloc] init];
// _cache.countLimit = 50; 限制缓存中对象数量
_cache.delegate = self; } return self;
} -(id)ReadWithKey:(NSString*)Key
{
return [_cache objectForKey:Key];
} -(void)LoadWithData:(id)data WithKey:(NSString*) Key
{
[_cache setObject:data forKey:Key];
} -(void)removeCacheWithKey:(NSString*)Key
{ [_cache removeObjectForKey:Key]; } -(void)removeAllCache
{
[_cache removeAllObjects];
} - (void)cache:(NSCache *)cache willEvictObject:(id)obj
{ NSLog(@"Clean:%@",obj);
} @end
上个项目的一些反思 II的更多相关文章
- 上个项目的一些反思 I
最近一直在反思之前的项目,发现了很多问题.比如数据安全... 虽然项目需求是只展示最新的数据,所以几乎没用什么本地存储.除了通讯录和用户的Token. 用户通讯录另表,今天反思下用户的Token的存储 ...
- 上个项目的一些反思 III
离线缓存 之前的项目因为实时性要求比较高,所以一打开客户端,就开始做网络请求.现在想想,是没有做内容的离线缓存.这个问题,我没意识到.产品经理也没有意识到... 我觉得Archiver,来做比较合适, ...
- git上传项目代码到github
参考: git学习——上传项目代码到github github上传时出现error: src refspec master does not match any解决办法 git 上传本地文件到gith ...
- GitHub的用法:到GitHub上部署项目
先提供两个较好的Git教程: 1. 如何在github部署项目: lhttp://jingyan.baidu.com/article/656db918fbf70ce381249c15.html 2. ...
- 如何从eclipse中下载并导入Github上的项目
eclipse导入项目,方法就是点击File ->Import,选择Existing Projects into Workspace 但前提是,你导入的这个项目原本就是用eclipse的构建的, ...
- 参与github上开源项目的大致流程和注意事项
Foreword github是一个很火的代码托管服务网站,可能好多人都想参与一两个项目玩一玩学习一下,但由于是纯英文的网站,可能又会止步于想法上没有动手实践.接下来我就介绍一下参与github上开源 ...
- 在GitHub上管理项目
在GitHub上管理项目 新建repository 本地目录下,在命令行里新建一个代码仓库(repository) 里面只有一个README.md 命令如下: touch README.md git ...
- Eclipse-将svn上的项目转化成相应的项目
这里假设svn上的项目为maven项目 首先从svn检出项目 其中项目名称code可自己定义更改新的名称 从svn检出的项目结构 然后将项目转化成相关的项目 转换加载中 加载/下载 maven相关内容 ...
- 利用gitbash上传项目到github
GitHub主要是用作基于Git的分布式版本管理系统的库,可以保存和管理自己的代码,而且主要用作代码的合作开发.不过对于我来说,Git控制系统还比较难以掌握,或者开发小系统还不太用得着,因此我把Git ...
随机推荐
- HTML和xhtml,CSS
索引: 初学者入门书籍 高级进阶书籍 W3C官方手册 网站架构 移动平台网站开发 视频资源 开发工具 初学者入门书籍: 中文电子书 深入浅出html pdf中文版 魅丽的网页设计 JAVA WE ...
- keyset获取元素
public static void main(String[] args){ Map map = new HashMap(); map.put("apple", "新鲜 ...
- codev 2147 数星星
2147 数星星 http://codevs.cn/problem/2147/ 题目描述 Description 小明是一名天文爱好者,他喜欢晚上看星星.这天,他从淘宝上买下来了一个高级望远镜.他十分 ...
- 【转】Java面试题全集2.2(上)
146.什么是IoC和DI?DI是如何实现的? 答:IoC叫控制反转,是Inversion of Control的缩写,DI(Dependency Injection)叫依赖注入,是对IoC更简单的诠 ...
- asp.net mvc短信接口调用——阿里大于API开发心得
互联网上有许多公司提供短信接口服务,诸如网易云信.阿里大于等等.我在自己项目里需要使用到短信服务起到通知作用,实际开发周期三天,完成配置.开发和使用,总的说,阿里大于提供的接口易于开发,非常的方便,短 ...
- 利用phpize 外挂php扩展
如果你的php是手动编译安装的 ,可能有一些扩展一开始并没有开启,以后需要某扩展的时候又不想重新编译php,使用phpize可以动态添加扩展 以Ubuntu为例, 如果你是我这样安装php的 apt ...
- 使用StackExchange.Redis客户端进行Redis访问出现的Timeout异常排查
问题产生 这两天业务系统在redis的使用过程中,当并行客户端数量达到200+之后,产生了大量timeout异常,典型的异常信息如下: Timeout performing HVALS Parser2 ...
- java spring mvc完整包下载地址
推荐使用该地址:http://maven.springframework.org/release/org/springframework/spring/ 更多详细参考地址:http://blog.cs ...
- 关于LuCi
好吧,又长见识了...相见恨晚的赶脚,恩,居然是我喜欢的lua.其主页在这里:http://luci.subsignal.org/ The initial reason for this projec ...
- 动手实验iptables的NAT功能实现流量穿透
1.NAT和iptables理论见: http://lustlost.blog.51cto.com/2600869/943110 2.引子 近期,有同事抱怨说数据入库时,由于数据库所在的服务器只有内网 ...