【问题标题】:malloc: *** mmap(size=24576) failed (error code=12) error: can't allocate region - iOSmalloc: *** mmap(size=24576) failed (error code=12) error: can't allocate region - iOS
【发布时间】:2013-10-22 21:20:21
【问题描述】:

当我浏览我的应用程序一段时间后,我的 iPod 4G 上出现此错误,整个屏幕变白或应用程序挂起,然后我必须重新启动应用程序。

**malloc: *** mmap(size=24576) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug**

我知道 error code=12 通常表示内存问题,但我已将 ARC 用于我的应用程序。

当我快速连续单击应用程序中的多个按钮时会发生同样的错误。

我为这个问题做了谷歌,但找不到任何东西。

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

    标签: iphone ios memory-management memory-leaks


    【解决方案1】:

    看来您的内存不足。在 didReceiveMemoryWarning 方法中放置一个简单的 NSLog 语句,看看它是否会触发。还可以尝试运行 Instruments 来检查和查找应用程序中任何多余内存消耗的来源。虽然 ARC 很有帮助并且可以避免大量人工干预,但它并不能确保您永远不会耗尽内存。

    尝试阅读this 以了解有关调试 malloc 的内容。

    【讨论】:

    • 感谢您的即时 rply.. 但分析并没有在我的代码中给我任何泄漏.. 如果我使用 Instruments 我只会得到一个泄漏.. mallo192 字节 CFNetwork createCanonicalURL
    • @objc_developer 检查泄漏不再那么重要了。 ARC 会为您处理大部分泄漏问题。您的问题是保留对对象的引用,以便它们在技术上不会泄漏,但也不能被释放。
    • 看来你分配的对象太多了。当您丢失了未使用的项目而没有释放它时,就会发生泄漏(这里 ARC 将帮助您)。但是例如,如果您保留所有具有强属性的对象,则不会出现泄漏,但会出现严重的分配问题。
    • @KIDdAe 那么我该如何解决你刚才提到的这个问题。??因为在我的问题中可能就是这种情况。我想我必须通过 self.object = nil; 将这些对象清零,我使用 Strong声明了这些对象>
    • 就像 Bourne 告诉您的那样,您可以在 didReceiveMemoryWarning 中处理这些问题并删除您目前不需要的对象。或者以更一般的方式,删除您需要时可以轻松收回的内容。
    【解决方案2】:

    请注意,对于 ARC,对象往往会被放入自动释放池中,因此虽然您可能已经处理了一个对象并且它已经超出范围或者它的指针已被取消,但它可能仍然会一直徘徊直到运行循环结束。

    如果你有一个大的活动,它会创建很多临时对象,那么就会填满内存。

    一种解决方案是将带有临时对象的代码包装在 @autoreleasepool{ } 块中。

    另一个是将活动拆分为多个部分,并在运行循环的单独迭代中运行它们。 GCD 或performSelector:after:0 可以在这里提供帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      • 2018-02-16
      • 2022-12-19
      • 2017-08-12
      • 1970-01-01
      • 2022-12-02
      • 2021-11-28
      相关资源
      最近更新 更多