我正在尝试优化包含大量图片和代码的iOS应用程序。我用一些程序缩小了图像的大小,但使用仪器显示应用程序仍然占用70-90mb的高速缓存。
我已经读过按需加载资源(图像)并在不再需要时丢弃它们将是一个很好的解决方案。我该怎么做?
我还有一个问题:
当我们使用时:
UIImage * aux = [UIImage imagenamed:@“image.png”];
在我们写了aux = nil之后;
图像是从缓存中丢弃的吗?
答案 0 :(得分:0)
一次只能看到其中一些图像吗?编写一个系统,只加载当前可见的图像(也许某些应用程序认为可能很快就会显示)。当您从系统收到内存警告时,请查找过去一段时间内未加载的图像并将其释放。
要回答第二个问题,是的,设置对nil的引用将在您使用ARC(自动引用计数)时释放它,并且如果您设置为nil的引用是对该对象的唯一引用。对象的所有引用必须在它被释放之前消失。
我会查看一些可用的解决方案,例如Path的FastImageCache,看看它们是否符合您的需求。 FastImageCache以类似于Sprite Sheets(由2D游戏使用)的格式在磁盘上存储未压缩的图像,因此可以在需要时快速加载它们。这里的重点是提高滚动性能,所以如果这不是你的问题,这可能不适合这项工作。
你也可以看一下this thread,虽然这是为了缓存网页图片。
您也可以查看The Tumblr Image Cache