added option to disable memory cache
use this: ```shouldDisableMemoryCache``` to toggle memory cache
This commit is contained in:
parent
a9ea132874
commit
df751e737b
|
@ -47,6 +47,11 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot
|
||||||
*/
|
*/
|
||||||
@property (assign, nonatomic) BOOL shouldDisableiCloud;
|
@property (assign, nonatomic) BOOL shouldDisableiCloud;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* use memory cache [defaults to YES]
|
||||||
|
*/
|
||||||
|
@property (assign, nonatomic) BOOL shouldCacheImagesInMemory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The maximum "total cost" of the in-memory image cache. The cost function is the number of pixels held in memory.
|
* The maximum "total cost" of the in-memory image cache. The cost function is the number of pixels held in memory.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -116,6 +116,9 @@ FOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) {
|
||||||
// Set decompression to YES
|
// Set decompression to YES
|
||||||
_shouldDecompressImages = YES;
|
_shouldDecompressImages = YES;
|
||||||
|
|
||||||
|
// memory cache enabled
|
||||||
|
_shouldCacheImagesInMemory = YES;
|
||||||
|
|
||||||
// Disable iCloud
|
// Disable iCloud
|
||||||
_shouldDisableiCloud = YES;
|
_shouldDisableiCloud = YES;
|
||||||
|
|
||||||
|
@ -196,9 +199,11 @@ FOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) {
|
||||||
if (!image || !key) {
|
if (!image || !key) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// if memory cache is enabled
|
||||||
NSUInteger cost = SDCacheCostForImage(image);
|
if (self.shouldCacheImagesInMemory) {
|
||||||
[self.memCache setObject:image forKey:key cost:cost];
|
NSUInteger cost = SDCacheCostForImage(image);
|
||||||
|
[self.memCache setObject:image forKey:key cost:cost];
|
||||||
|
}
|
||||||
|
|
||||||
if (toDisk) {
|
if (toDisk) {
|
||||||
dispatch_async(self.ioQueue, ^{
|
dispatch_async(self.ioQueue, ^{
|
||||||
|
@ -290,6 +295,7 @@ FOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) {
|
||||||
}
|
}
|
||||||
|
|
||||||
- (UIImage *)imageFromDiskCacheForKey:(NSString *)key {
|
- (UIImage *)imageFromDiskCacheForKey:(NSString *)key {
|
||||||
|
|
||||||
// First check the in-memory cache...
|
// First check the in-memory cache...
|
||||||
UIImage *image = [self imageFromMemoryCacheForKey:key];
|
UIImage *image = [self imageFromMemoryCacheForKey:key];
|
||||||
if (image) {
|
if (image) {
|
||||||
|
@ -298,7 +304,7 @@ FOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) {
|
||||||
|
|
||||||
// Second check the disk cache...
|
// Second check the disk cache...
|
||||||
UIImage *diskImage = [self diskImageForKey:key];
|
UIImage *diskImage = [self diskImageForKey:key];
|
||||||
if (diskImage) {
|
if (diskImage && self.shouldCacheImagesInMemory) {
|
||||||
NSUInteger cost = SDCacheCostForImage(diskImage);
|
NSUInteger cost = SDCacheCostForImage(diskImage);
|
||||||
[self.memCache setObject:diskImage forKey:key cost:cost];
|
[self.memCache setObject:diskImage forKey:key cost:cost];
|
||||||
}
|
}
|
||||||
|
@ -369,7 +375,7 @@ FOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) {
|
||||||
|
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
UIImage *diskImage = [self diskImageForKey:key];
|
UIImage *diskImage = [self diskImageForKey:key];
|
||||||
if (diskImage) {
|
if (diskImage && self.shouldCacheImagesInMemory) {
|
||||||
NSUInteger cost = SDCacheCostForImage(diskImage);
|
NSUInteger cost = SDCacheCostForImage(diskImage);
|
||||||
[self.memCache setObject:diskImage forKey:key cost:cost];
|
[self.memCache setObject:diskImage forKey:key cost:cost];
|
||||||
}
|
}
|
||||||
|
@ -400,9 +406,11 @@ FOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) {
|
||||||
if (key == nil) {
|
if (key == nil) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
[self.memCache removeObjectForKey:key];
|
if (self.shouldCacheImagesInMemory) {
|
||||||
|
[self.memCache removeObjectForKey:key];
|
||||||
|
}
|
||||||
|
|
||||||
if (fromDisk) {
|
if (fromDisk) {
|
||||||
dispatch_async(self.ioQueue, ^{
|
dispatch_async(self.ioQueue, ^{
|
||||||
[_fileManager removeItemAtPath:[self defaultCachePathForKey:key] error:nil];
|
[_fileManager removeItemAtPath:[self defaultCachePathForKey:key] error:nil];
|
||||||
|
|
Loading…
Reference in New Issue