【问题标题】:confusing memory allocation error on iPhoneiPhone上令人困惑的内存分配错误
【发布时间】:2010-10-27 10:36:46
【问题描述】:

您好,我正在开发一个提供图像和文本信息的 iPhone 应用程序。在每个文本中都有一个图像,可以单击和缩放,用 UIImageView 显示

    NSString* imgName = [imgPath substringToIndex:[imgPath rangeOfString:@".jpg"].location];
UIImage* img = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imgName ofType:@"jpg"]]; 
[imgView setImage:img];

当我通过一张一张地打开图像浏览图像时,应用程序崩溃(在设备上调试)。控制台出现一些错误:

: 解压错误 my_app_name(1226,0x3e088868) malloc: * mmap(size=32768) 失败(错误代码=12) * 错误:无法分配区域

然后:

CoreAnimation:分配 2228352 字节失败。

我没有代码泄漏,如果我不打开图像,我不会收到错误消息。那么有人知道这个问题可能出在哪里吗?

【问题讨论】:

    标签: iphone memory-management


    【解决方案1】:

    哦,我想我终于修好了。是的,我的图片比较大,大小约为 700*600。

    问题似乎出在[imgView setImage:img]; 中,虽然 img 已发布,但不知何故仍在内存中,我不知道。在 dealloc 中释放 imgView 之前的一行代码[imgView setImage:nil]; 解决了这个问题。

    感谢您的帮助。

    【讨论】:

    • 真的吗?这解决了你的问题?听起来很奇怪。
    • 在分配和释放几个显示各种文档的 UIWebView 后,我遇到了同样的“CoreAnimation: failed to allocate”错误;显然,这些在释放 webViews 后继续使用内存。阅读此解决方案后,我尝试在发布之前调用 [webView loadHTMLString:@"" baseURL:nil],这解决了问题!
    【解决方案2】:

    您似乎使用了太多内存?

    您打开了多少张图片?从连接的仪器开始,观察内存占用。

    请记住,图像在加载时比在磁盘上压缩时占用更多的内存。

    【讨论】:

    • 您好 Eiko 谢谢您的回复。当我打开大约 30 张图像时它会崩溃,但我总是在打开新图像时释放旧图像。所有图片均小于 100kb(在 Mac 上)。
    • 仪器显示总分配内存15Mb,主要是我的语音输出的东西占用。我在 CG Graphics 调用的类别中看到了一些 Malloc 1+Mb,我不明白这是怎么回事。
    • 一张图片在加载时需要大约 pixel_hor * pixel_ver * 4 字节,并且错误消息表明它需要大约 2 MB。也许检查他们是否真的被释放了。 Instruments 提供了一个很好的内存使用图表。
    【解决方案3】:

    尝试在本地自动释放池中打包您的分配/释放。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-24
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 2012-09-12
      • 1970-01-01
      相关资源
      最近更新 更多