NSCache를 사용하는 것 같습니다. 그것은 매우 간단합니다. 메모리 경고가 처리되는지 확인하기 위해 NSCache의 하위 클래스를 작성했습니다.
(무겁게 StackOverflow의 다른 게시물 기준) NATAutoPurgeCache 구현
@implementation NATAutoPurgeCache
+ (NATAutoPurgeCache *)sharedCache
{
static NATAutoPurgeCache *_sharedCache = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedCache = [[self alloc] init];
});
return _sharedCache;
}
- (id)init
{
self = [super init];
if (self) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(removeAllObjects) name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
}
return self;
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
}
@end
및 화상 필요한 때를 이용 (이 경우 흐린 이미지를 저장하는)
UIImage* blurImage = [myCache objectForKey:@"blurred placeholder image"];
if (!blurImage)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
UIImage* blurImage = self.activityPic.image;
blurImage= [blurImage applyLightEffect];
dispatch_async(dispatch_get_main_queue(), ^{
self.activityPic.image = blurImage;
});
[myCache setObject:blurImage forKey:@"blurred placeholder image"];
});
}
else {
self.activityPic.image = blurImage;
}