wupher
8/7/2015 - 6:38 AM

Simple Cache impl base on NSCoding

Simple Cache impl base on NSCoding

//
//  FWCache.m
//  CacheMeIfYouCan
//
//  Created by fanwu on 15/8/7.
//  Copyright (c) 2015年 ND. All rights reserved.
//

#import "FWCache.h"
#import "NSString+MD5.h"

#define kCacheFileNameExtend @"cache"
#define kCacheDirectoryExtend @"caches"

@interface FWCache ()
@property(copy, nonatomic) NSString * name;
@end

@implementation FWCache
static BOOL _enabled = YES;

+ (void)enable{
    _enabled = YES;
}

+ (void)disable{
    _enabled = NO;
}

- (instancetype)initWithName:(NSString *)name{
    self = [super init];
    if (!_enabled|| !name) {
        self = nil;
    }
    if (!self) {
        return nil;
    }
    
    return self;
}

- (NSString *)hashedName{
    return [self.name MD5String];
}

- (NSString *)cacheFileName{
    return [self.hashedName stringByAppendingString:kCacheFileNameExtend];
}

- (NSString *)appCacheDirectory{
    NSArray * searchPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    return searchPath.firstObject;
}

- (NSString *)cacheLocation{
    return [[self.appCacheDirectory stringByAppendingString:kCacheDirectoryExtend] stringByAppendingPathComponent:self.cacheFileName];
}

- (void)saveObject:(id<NSCopying>)object{
    [NSKeyedArchiver archiveRootObject:object toFile:self.cacheLocation];
}

- (id<NSCoding>)fetchObject{
    return [NSKeyedUnarchiver unarchiveObjectWithFile:self.cacheLocation];
}


@end