Skip to content

Commit

Permalink
Memory cache reserves 12MB free RAM to prevent watchdog from killing …
Browse files Browse the repository at this point in the history
…the app before memory warning is sent
  • Loading branch information
clowwindy authored and Olivier Poitrey committed Jun 4, 2012
1 parent 248fbc2 commit 0bce0b9
Showing 1 changed file with 41 additions and 2 deletions.
43 changes: 41 additions & 2 deletions SDWebImage/SDImageCache.m
Expand Up @@ -10,10 +10,37 @@
#import "SDWebImageDecoder.h"
#import <CommonCrypto/CommonDigest.h>
#import "SDWebImageDecoder.h"
#import <mach/mach.h>
#import <mach/mach_host.h>

static SDImageCache *instance;

static NSInteger cacheMaxCacheAge = 60*60*24*7; // 1 week
static natural_t minFreeMemLeft = 1024*1024*12; // reserve 12MB RAM

static SDImageCache *instance;
// inspired by http://stackoverflow.com/questions/5012886/knowing-available-ram-on-an-ios-device
static natural_t get_free_memory(void)
{
mach_port_t host_port;
mach_msg_type_number_t host_size;
vm_size_t pagesize;

host_port = mach_host_self();
host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
host_page_size(host_port, &pagesize);

vm_statistics_data_t vm_stat;

if (host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size) != KERN_SUCCESS)
{
NSLog(@"Failed to fetch vm statistics");
return 0;
}

/* Stats in bytes */
natural_t mem_free = vm_stat.free_count * pagesize;
return mem_free;
}

@implementation SDImageCache

Expand Down Expand Up @@ -151,6 +178,10 @@ - (void)notifyDelegate:(NSDictionary *)arguments

if (image)
{
if (get_free_memory() < minFreeMemLeft)
{
[memCache removeAllObjects];
}
[memCache setObject:image forKey:key];

if ([delegate respondsToSelector:@selector(imageCache:didFindImage:forKey:userInfo:)])
Expand Down Expand Up @@ -196,7 +227,11 @@ - (void)storeImage:(UIImage *)image imageData:(NSData *)data forKey:(NSString *)
{
return;
}


if (get_free_memory() < minFreeMemLeft)
{
[memCache removeAllObjects];
}
[memCache setObject:image forKey:key];

if (toDisk)
Expand Down Expand Up @@ -248,6 +283,10 @@ - (UIImage *)imageFromKey:(NSString *)key fromDisk:(BOOL)fromDisk
image = SDScaledImageForPath(key, [NSData dataWithContentsOfFile:[self cachePathForKey:key]]);
if (image)
{
if (get_free_memory() < minFreeMemLeft)
{
[memCache removeAllObjects];
}
[memCache setObject:image forKey:key];
}
}
Expand Down

0 comments on commit 0bce0b9

Please sign in to comment.