我们正在缓存从我们的服务器下载的图像。我们从ASIHTTPRequest回调中获取数据,如下所示:
#pragma mark ASIHTTPRequest callback
-(void)imageDownloadFinished:(ASIHTTPRequest*)aRequest
{
NSString* fileName = aRequest.url.path.lastPathComponent;
[self imageDidArrive:[aRequest responseData] forFileName:fileName];
}
我们将图像数据写入本地存储,如下所示:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0] ;
NSString* folder = [[documentsDirectory stringByAppendingPathComponent:@"flook.images"] retain];
NSString* fileName = [folder stringByAppendingFormat:@"/%@", aBaseFilename];
BOOL writeSuccess = [anImageData writeToFile:fileName atomically:NO];
下载的图像总是预期的大小,大约45-85KB。
稍后,我们从缓存中读取图像:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0] ;
NSString* folder = [[documentsDirectory stringByAppendingPathComponent:@"flook.images"] retain];
NSString* fileName = [folder stringByAppendingFormat:@"/%@", aBaseFilename];
image = [UIImage imageWithContentsOfFile:fileName];
有时,从此缓存读取返回的图像要小得多,因为它们压缩得更多 - 大约5-10KB。操作系统是否已完成此操作?
编辑 - 事实证明我们正在下载小图片,因此问题不在iPhone上
答案 0 :(得分:0)
如果我正确地读取你的代码,你正在使用NSData方法writeToFile:atomically:写入文件。这样就可以对NSData对象的内容进行精确的逐字节写入。
似乎NSData对象是直接从HTTP响应的内容创建的,所以答案是“否”,不应该发生任何压缩。
答案 1 :(得分:0)
我们有解决方案。当手机在3G网络上运行时,O2会介入并对我们的图像应用额外的JPG压缩,这样它们看起来更加可怕。