首页 > 系统服务 > 详细

实现对象缓存框架二、ZSYCache

时间:2015-07-15 10:44:25      阅读:164      评论:0      收藏:0      [点我收藏+]

  ZSYCache作为给调用者暴露的主要Api方法,来实现对象的缓存。

  思路:

    1. 每一个ZSYCache对象,可以存在多个缓存队列、对个缓存池。

    2. 每一个新创建的ZSYCache对象,他们的 缓存队列、缓存池,应该是互相独立。

    3. 使用单例对象,应该提供默认的缓存队列、缓存池

    4. 根据 名字--队列,名字--池, 保存多个队列、池

    5. 在哪个时刻将内存队列、内存池的所有对象持久化到本地

    6. 在哪个时刻将本地对象,恢复到内存队列、内存池

 

下面给出代码:

//.h
#import <Foundation/Foundation.h>
#import "ZSYCacheHolder.h"

@interface ZSYCache : NSObject

//ZSYCache名字
@property (nonatomic, copy , readonly) NSString *name;

//按key保存队列对象
@property (nonatomic, strong, readonly) NSMutableDictionary *queues;

//按key保存池对象
@property (nonatomic, strong, readonly) NSMutableDictionary *pools;

//依赖一个持久化工具对象
@property (nonatomic, strong, readonly) ZSYCacheHolder *holder;

+ (instancetype)sharedCache;

- (instancetype)initWithIdentifier:(NSString *)identifier;

//添加一个新的队列
- (void)addQueue:(NSString *)queueName Size:(NSInteger)size;

//添加一个新的池
- (void)addPool:(NSString *)poolName Size:(NSInteger)size;

//对象与队列的操作
- (void)zsyPushObject:(id)obj ToQueue:(NSString *)queueName;
- (id)zsyPopFromQueue:(NSString *)queueName;
- (NSArray *)objectsInQueue:(NSString *)queueName;

//获取当前ZSYCache对象在内存缓存的总大小
- (NSInteger)memorySize;

//对象的持久化
- (void)save;
- (void)load;

//对象的恢复
+ (void)save;
+ (void)load;

@end

 

//.m 
//首先是init函数,初始化ZSYCache对象的参数

- (instancetype)initWithIdentifier:(NSString *)identifier {
    self = [super init];
    if (self) {
        _name = [identifier copy];

        //保存池的字典
        _pools = [NSMutableDictionary dictionary];

        //保存队列的字典
        _queues = [NSMutableDictionary dictionary];

        //保存设置的字典
        _options = [NSMutableDictionary dictionary];

        //依赖工具对象
        _holder = [[ZSYCacheHolder alloc] initWithIdentifier:_name];
 
        //添加默认的队列、池
        [self addQueue:nil Size:0];
        [self addPool:nil Size:0];
    }
    return self;
}

 

// 添加一个新的队列对象到ZSYCache对象

- (void)addQueue:(NSString *)queueName Size:(NSInteger)size  {
    if (!queueName || [queueName isEqualToString:@""]) {
        queueName = ZSYCACHE_DEFAULT_QUEUE_NAME;
    }
    if ([self.queues hasKey:queueName]) {
        return;
    }
    ZSYCacheQueue *queue = [[ZSYCacheQueue alloc] initWithHolder:_holder];
    queue.name  = queueName;
    if (size > 0) {
        queue.size = size;
    }
        
    [self.queues setObject:queue forKey:queueName];
}

 

//将对象缓存到队列

- (void)zsyPushObject:(id)obj ToQueue:(NSString *)queueName {
if (!queueName || [queueName isEqualToString:@""]) { queueName = ZSYCACHE_DEFAULT_QUEUE_NAME; }
ZSYCacheQueue
*queue = self.queues[queueName]; [queue zsyPushObj:obj]; }

 

//将缓存队列头部对象出队

- (id)zsyPopFromQueue:(NSString *)queueName {

    if (!queueName || [queueName isEqualToString:@""]) {
        queueName = ZSYCACHE_DEFAULT_QUEUE_NAME;
    }

    ZSYCacheQueue *queue = self.queues[queueName];
    id pop = [queue zsyPopObj];
    return pop;
}

 

//获取缓存队列中的所有缓存对象

- (NSArray *)objectsInQueue:(NSString *)queueName {
   
   if (!queueName || [queueName isEqualToString:@""]) {
        queueName = ZSYCACHE_DEFAULT_QUEUE_NAME;
    }

    ZSYCacheQueue *queue = self.queues[queueName];
    NSMutableArray *cacheList = [NSMutableArray array];
    
    //注意:ZSYCacheQueue只有key数组【每一个key找到缓存对象】,
    //每一个key对应一个 ZSYCacheObejct,并不是直接对应缓存对象
    for (int i = 0; i < [queue.keysQueue count]; i++) {
        NSString *key = queue.keysQueue[i];

        //通过key查找到 ZSYCacheObject的一个对象
        ZSYCacheObject *cacheObj = [_holder zsyGetObjectForKey:key];

        //从ZSYCacheObejct对象,获取到保存的原始对象
        if (cacheObj.cacheObjectValue) {
            [cacheList addObject:cacheObj.cacheObjectValue];
        }
    }
    return cacheList;
} 

 

其他的暂未实现,后续实现后再加上来。

实现对象缓存框架二、ZSYCache

原文:http://www.cnblogs.com/xiongzenghui/p/4647591.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!