linphone-iphone/Classes/Utils/NinePatch/TUNinePatchCache.m
2012-07-27 15:17:01 +02:00

133 lines
No EOL
3.7 KiB
Objective-C
Executable file

//
// TUNinePatchCache.m
// NinePatch
//
// Copyright 2010 Tortuga 22, Inc. All rights reserved.
//
#import "TUNinePatchCache.h"
#import "TUCachingNinePatch.h"
#import "TUNinePatch.h"
@interface TUNinePatchCache ()
@property(nonatomic, retain, readwrite) NSMutableDictionary *ninePatchCache;
@end
@implementation TUNinePatchCache
#pragma mark Synthesized Properties
@synthesize ninePatchCache = _ninePatchCache;
#pragma mark Init + Dealloc
-(id)init {
if (self = [super init]) {
self.ninePatchCache = [NSMutableDictionary dictionary];
}
return self;
}
#pragma mark -
+(id)shared {
static TUNinePatchCache *shared;
if (!shared) {
shared = [[self alloc] init];
}
return shared;
}
#pragma mark -
-(void)dealloc {
self.ninePatchCache = nil;
[super dealloc];
}
#pragma mark Getting Ninepatches Directly
// Getting Ninepatches Directly
-(id < TUNinePatch >)ninePatchNamed:(NSString *)ninePatchName {
TUCachingNinePatch *cachingNinePatch = [self cachingNinePatchNamed:ninePatchName];
NPAssertNilOrIsKindOfClass(cachingNinePatch,TUCachingNinePatch);
return (!cachingNinePatch)?(nil):([cachingNinePatch ninePatch]);
}
-(TUCachingNinePatch *)cachingNinePatchNamed:(NSString *)ninePatchName {
TUCachingNinePatch *cachingNinePatch = [self cachedCachingNinePatchNamed:ninePatchName];
NPAssertNilOrIsKindOfClass(cachingNinePatch,TUCachingNinePatch);
if (!cachingNinePatch) {
cachingNinePatch = [self constructCachingNinePatchNamed:ninePatchName];
NPAssertNilOrIsKindOfClass(cachingNinePatch,TUCachingNinePatch);
if (cachingNinePatch) {
[self cacheCachingNinePatch:cachingNinePatch
named:ninePatchName];
}
}
return cachingNinePatch;
}
-(void)cacheCachingNinePatch:(TUCachingNinePatch *)cachingNinePatch named:(NSString *)ninePatchName {
NPAssertPropertyNonNil(ninePatchCache);
if (cachingNinePatch && ninePatchName) {
[self.ninePatchCache setObject:cachingNinePatch
forKey:ninePatchName];
}
}
-(TUCachingNinePatch *)cachedCachingNinePatchNamed:(NSString *)ninePatchName {
return (!ninePatchName)?(nil):([self.ninePatchCache objectForKey:ninePatchName]);
}
-(TUCachingNinePatch *)constructCachingNinePatchNamed:(NSString *)ninePatchName {
return (!ninePatchName)?(nil):([TUCachingNinePatch ninePatchCacheWithNinePatchNamed:ninePatchName]);
}
#pragma mark Getting Images Directly
-(UIImage *)imageOfSize:(CGSize)size forNinePatchNamed:(NSString *)ninePatchName {
NPParameterAssertNotNilIsKindOfClass(ninePatchName,NSString);
UIImage *image = nil;
TUCachingNinePatch *cachingNinePatch = [self cachingNinePatchNamed:ninePatchName];
if (cachingNinePatch) {
image = [cachingNinePatch imageOfSize:size];
}
return image;
}
#pragma mark Getting Ninepatches - Convenience
+(TUCachingNinePatch *)cachingNinePatchNamed:(NSString *)ninePatchName {
return [[self shared] ninePatchNamed:ninePatchName];
}
+(id < TUNinePatch >)ninePatchNamed:(NSString *)ninePatchName {
TUCachingNinePatch *cachingNinePatch = [[self shared] cachingNinePatchNamed:ninePatchName];
NPAssertNilOrIsKindOfClass(cachingNinePatch,TUCachingNinePatch);
return (!cachingNinePatch)?(nil):([cachingNinePatch ninePatch]);
}
#pragma mark Getting Images - Convenience
+(UIImage *)imageOfSize:(CGSize)size forNinePatchNamed:(NSString *)ninePatchName {
return [[self shared] imageOfSize:size
forNinePatchNamed:ninePatchName];
}
#pragma mark Cache Management - Direct
-(void)flushCache {
[self.ninePatchCache removeAllObjects];
}
-(void)flushCacheForNinePatchNamed:(NSString *)name {
if (name) {
[self.ninePatchCache removeObjectForKey:name];
}
}
#pragma mark Cache Management - Convenience
+(void)flushCache {
[[self shared] flushCache];
}
+(void)flushCacheForNinePatchNamed:(NSString *)name {
[[self shared] flushCacheForNinePatchNamed:name];
}
@end