2014-10-20 5 views
0

iOS에서 처리 된 이미지 (예 : 앱이 실행되는 동안 생성 된 이미지)를 캐시하는 데 도움이되는 모범 사례 또는 라이브러리가 있습니까? 다운로드 한 이미지에 SDWebImage를 사용하지만 앱의 여러 위치에서 흐리게 처리하거나 다른 방법으로 이러한 이미지를 처리합니다. 캐시에 처리 된 이미지를 저장하여 사용자가 이미지를 열 때마다 다시 처리하기보다는 쉽게 액세스 할 수 있도록하고 싶습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?캐시 처리 (예 : 흐리게 또는 수정) 이미지

감사합니다.

답변

0

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; 
      } 
관련 문제