当C++遇到IOS应用开发---LRUCache缓存
本文着重介绍如何在XCODE中,通过C++开发在IOS环境下运行的缓存功能。算法基于LRU(最近最少使用)。有关lru详见:
http://en.wikipedia.org/wiki/Page_replacement_algorithm#Least_recently_used
之前在网上看到过网友的一个C++实现,感觉不错,所以核心代码就采用了他的设计。相关链接如下:
http://www.cppblog.com/red22/articles/62499.html
原作者通过两个MAP对象来记录缓存数据和LRU队列,注意其中的LRU队列并不是按照常用的方式使用LIST链表,而是使用MAP来代替LIST,有关这一点原作者已做了说明。
另外还有人将MRU与LRU组合在一起使用,当然如果清楚了设计原理,那么就很容易理解了,比如这个开源项目:http://code.google.com/p/lru-cache-cpp/
考虑到缓存实现多数使用单例模式,这里使用C++的模版方式设计了一个Singlton基类,这样以后只要继承该类,子类就会支持单例模式了。其代码如下:
void testLRUCache(){ //指针方式 DZCache::instance()->set(@"name", @"daizhj");//设置 NSString* name = (NSString*)DZCache::instance()->get(@"name");//获取 std::cout<<[name UTF8String]<<endl; NSNumber * age=[NSNumber numberWithInt:123123]; DZCache::instance()->set(@"age", age); age = (NSNumber*)DZCache::instance()->get(@"age"); //对象方式 DZCache::getInstance().set(@"name", @"daizhenjun"); name = (NSString*)DZCache::getInstance().get(@"name"); std::cout<<[name UTF8String]<<endl; age = [NSNumber numberWithInt:123456]; DZCache::getInstance().set(@"age", age); age = (NSNumber*)DZCache::getInstance().get(@"age");}
好了,今天的内容就先到这里了。
原文链接:http://www.cnblogs.com/daizhj/archive/2012/11/13/2768092.html
作者: daizhj, 代震军
微博: http://weibo.com/daizhj
Tags:ios, c++, lru, cache, map