How to Clear IOS App Library Cache (Downloaded Images)

别说谁变了你拦得住时间么 提交于 2019-12-30 12:15:39

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!