问题
I am working with download async images. I get a lot images from my webserver but all are temporary and I won't cache any of them. But the app apparently save the download images in /Library/Caches. How can I resolve that?
Are there any way to prevent cache downloaded images? Or delete them from cache?
I tried these two different methods:
#pragma mark - Method 1
- (void)method1{
NSURL *imageURL = [NSURL URLWithString:self.photoLink];
[self setImage:[UIImage imageNamed:@"nut"] forState:UIControlStateNormal];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
NSData *data = [NSData dataWithContentsOfURL:imageURL options:NSDataReadingUncached error:NULL];
dispatch_async(dispatch_get_main_queue(), ^{
[self setImage:[UIImage imageWithData:data] forState:UIControlStateNormal];
});
});
//}
}
#pragma mark - Method 2
- (void)method2{
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
// The Placeholder
[self setImage:[UIImage imageNamed:@"nut"] forState:UIControlStateNormal];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(loadDataAsyc)
object:nil];
[queue addOperation:operation];
[operation release];
}
-(void)loadDataAsyc{
// create a local autorelease pool since this code runs not on main thread
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.photoLink] options:NSDataReadingUncached error:NULL];
UIImage *image = [UIImage imageWithData:data];
[self performSelectorOnMainThread:@selector(showImage:) withObject:image waitUntilDone:NO];
[pool release];
}
-(void)showImage:(UIImage *)image{
[self setImage:image forState:UIControlStateNormal];
}
回答1:
The cache will be emptied when it needs to be, i.e. when the application receives a Low Memory Warning. There is no reason for you to do this yourself, and there is no public API available.
NOTE
When the os manages something for you, you don't need to worry about it.
But if you really want to clear your cache then follow this
NSFileManager *filemgr;
filemgr = [NSFileManager defaultManager];
if ([filemgr removeItemAtPath: [NSHomeDirectory() stringByAppendingString:@"/Library/Caches"] error: NULL] == YES)
NSLog (@"Remove successful");
else
NSLog (@"Remove failed");
[filemgr createDirectoryAtPath: [NSHomeDirectory() stringByAppendingString:@"/Library/Caches"] withIntermediateDirectories:NO attributes:nil error:nil];
来源:https://stackoverflow.com/questions/14908131/how-to-clear-ios-app-library-cache-downloaded-images