我正在下载 App.net 用户上传的封面图片。App.net 要求这些封面图片的宽度至少为 960 像素。我用一个简单的方法来获取它们AFImageRequestOperation
:
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:URL];
AFImageRequestOperation *imageRequestOperation = [AFImageRequestOperation imageRequestOperationWithRequest:urlRequest success:^(UIImage *image) {
if (completionHandler) {
completionHandler(image); // Load image into UI...
}
}];
[self.fetchQueue addOperation:imageRequestOperation];
这是有效的,没有内存峰值。
我想缓存经过身份验证的用户的图像,这样用户就不必在每次打开应用程序时都下载它们。一旦我将下载的图像存档到磁盘,我的内存就会出现巨大的峰值。例如,我的封面图片目前是 3264 x 2448 像素。在我的 Mac 上下载时,它大约为 1.3 MB。但是,一旦我使用TMCache 的方法UIImagePNGRepresentation(image)
或通过TMCache的setObject:forKey:
方法创建了一个 NSData 对象,应用程序的已用内存就会飙升至大约 60,0 MB。
为清楚起见,这就是我将文件写入磁盘所做的一切:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
NSURL *fileURL = ... // URL of file in "/Application Support"
NSData *imageData = UIImagePNGRepresentation(imageToSave);
[imageData writeToURL:fileURL atomically:YES];
});
谁能告诉我发生了什么?为什么将 1,3 MB 外推到几乎 60 倍。我怎样才能避免这种大规模且可能造成严重后果的通货膨胀。这是一张图片,如果用户打开多个配置文件,每个配置文件都有一个缓存图像怎么办?