【发布时间】:2013-02-01 05:17:56
【问题描述】:
我正在处理下载异步图像。我从我的网络服务器获得了很多图像,但都是临时的,我不会缓存它们中的任何一个。但该应用程序显然将下载图像保存在 /Library/Caches 中。我该如何解决?
有什么办法可以防止缓存下载的图片吗?还是从缓存中删除?
我尝试了这两种不同的方法:
#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];
}
【问题讨论】:
-
如果您可以只在数据上 writeToFile: 并将其放在您想要的位置,为什么还要禁用图像缓存?缓存机制可以加速未来的交易。
-
[[TTURLCache sharedCache] removeAll:YES];
-
我想禁用,因为我创建了一个大小为 600KB 的简单应用程序。加载临时图像后,App Storage 达到 15MB!并且永不减少。这对于这个简单的应用来说太过分了。