ios - iPad中大量大图像的内存泄漏

标签 ios ipad memory-management memory-leaks nsarray

我正在尝试存储 UIImage 中的数据NSArray ,实际上是 60 张图片,每张图片大小为 300kb。然后,我尝试为 中的图像制作动画。 UIImageView .
我的代码:

    NSMutableArray *arr = [[NSMutableArray alloc] init];
    for (int i=0; i<61; ++i) {
        [arr addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%i.png", i]]];
    }

    img.animationImages = arr;
    img.animationDuration = 1.5;
    img.contentMode = UIViewContentModeBottomLeft;
    [img startAnimating];

当我在 iPad Simulator 4.3 中测试它时,它运行良好。
当我想在我的设备 (iPad 1) 上测试它时,应用程序 崩溃 .
注:如果我评论此代码,应用程序不会崩溃: [img 开始动画];
1. 可能是什么问题?我认为这是内存问题...?!
2. 我可以在 NSArray 中存储大量 UIImages 吗?

最佳答案

您的 png 文件可能有 300KB,但这是一种压缩格式。

要了解图像本身的大小,您应该乘以每个像素的宽度、高度和字节数。

即如果图像的大小为 1024 * 1024 和 RGBA 模型,则图像本身在内存中的大小为 4MB。这只是一张图片。如果您有 300 个,则大约为 120MB。

注意:这只是一个粗略的经验法则,但它给了你一个想法。

因此,您应该在数组中保留路径名并仅在需要时加载图像,并且应该调整缩略图的大小并作为文件存储在磁盘上。不要只是缩放 UIImageView。

这里是 a great article带有关于调整大小的代码。

关于ios - iPad中大量大图像的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8229346/

相关文章:

ios - 语言区在 iTunes connect 中显示待定状态 应用内购买详情

android - 后台应用程序会持续接收蓝牙数据包多长时间?

ios - 请求时间过长时取消 NSURLSession dataTask

javascript - 检测 iPhone/iPad 是否受密码保护

c++ - 无法使用 new[]/C++/Linux/x86_64 分配 2-4 Gb 的 RAM

ios - AVAssetExportSession 在运行时不起作用

objective-c - 如何强制 iPad 启动 wifi 连接?

ios - UIControl子类延迟响应

c# - 为什么要使用小于 32 位的整数?

c++ - 我如何在此功能中释放内存?