2013-02-16 37 views
1

我正在使用下載的異步圖像。我從我的網絡服務器上獲得了很多圖像,但都是臨時的,我不會緩存它們中的任何一個。但該應用程序顯然將下載圖像保存在/ Library/Caches中。我該如何解決這個問題?如何清除IOS應用程序庫緩存(下載的圖像)

有什麼辦法可以防止緩存下載的圖片?或從緩存中刪除它們?

我嘗試這兩種不同的方法:

#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]; 
} 
+0

爲什麼你需要禁用圖片緩存,如果你可以只將writeToFile:上的數據,並把它放在你通緝?緩存機制加速了未來的交易。 – CodaFi 2013-02-16 07:42:08

+0

[[TTURLCache sharedCache] removeAll:YES]; – 2013-02-16 07:54:42

+0

我想禁用,因爲我創建了一個大小爲600KB的簡單應用程序。加載臨時圖像後,App Store將達到15MB!並永不減少。這對於這個簡單的應用程序來說太多了。 – rcmcastro 2013-02-17 03:50:35

回答

0

當它需要緩存會被清空,當應用程序接收到一個低內存警告即。你沒有理由自己做這件事,也沒有可用的公共API。


注意
當OS管理的東西給你,你不必擔心。


但是,如果你真的想清除緩存然後按照這個

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]; 
+2

如果您懷疑高速緩存已損壞,該怎麼辦? – 2013-10-20 22:53:14