首先,我没有使用 ARC,因为我遇到了更大的问题,我需要完全控制我的内存管理。
情况如下:我需要从服务器加载大量远程 JPEG 图像并将它们显示在滚动视图中。一旦用户向下滚动一点,滚动视图中的顶部图像就会被释放。那是工作,包含的视图都正常释放。问题是,在加载远程图像后,大量内存仍然被分配并且没有被释放。这是我获取远程图像的代码(继承 UIImageView):
- (void)downloadImage {
NSData *posterData = [[NSData alloc] initWithContentsOfURL:self.url options:NSDataReadingUncached error:nil];
UIImage *img = [[UIImage alloc] initWithData:posterData];
[posterData release];
self.image = img;
[img release];
}
// that gets called from:
- (void)setImageFromURL:(NSURL *)_url{
[NSThread detachNewThreadSelector:@selector(downloadAndLoadImage) toTarget:self withObject:nil];
}
当我使用 Instruments 检查我的代码时,我的 UIImageView 会按预期释放,但以下内容仍然停留在我的内存中并发送垃圾邮件:
显然 CFData、Malloc 9.00 KB、NSConcreteData 都是由我的 downloadImage 方法产生的。我究竟做错了什么?这让我发疯......你如何安全地加载大量远程图像内存?我也尝试了 NSURLConnection,但它是更糟然后更好。:(
图像大小从 6 到 25KB 不等。
提前谢谢了!
更新
我最终使用了SDWebImage,它效果很好并且非常易于使用。