gpt4 book ai didi

ios - Air for iOS - 如何处理由于内存有限导致的崩溃?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:32:39 25 4
gpt4 key购买 nike

我们目前正在使用适用于 iOS 的 Air 开发 iPad 应用程序,但有时会遇到崩溃(仅在装有 iOS 5 的 iPad1 上),这似乎是因为该应用程序占用了太多内存。

如何在应用程序中捕获/处理此类错误?内存不足时如何通知?试图捕捉 flash.errors.MemoryError 似乎不起作用。有什么建议吗?

最佳答案

我在这方面做了一些工作,这里有一些我可以给你的提示。

  1. 获取 Flash Builder 4.6 Premium

    如果仅针对分析器,请获取它。它具有可用于诊断此类问题的最佳分析器之一。话虽如此,周围还有其他 Flash 分析器,它们具有不同程度的有用性。

    仅此一项就可以帮助您找到并诊断大部分内存在原始内存使用方面的去向,还可以帮助您找到正在创建和销毁的对象数量,以及在垃圾收集器启动之前它们停留了多长时间终于抽出时间放手了。

  2. 池化较小的琐碎对象

    与其不断地创建和销毁较小的对象,不如创建 object pools .这将为您节省不断启动新对象的成本,并使您不必等到垃圾收集器运行后再释放内存。

    在 actionscript 中创建对象池有很多示例和模式可供引用。如果 AS 支持泛型会更容易,但即使没有泛型,它仍然非常简单。

  3. 及时处理大件元素

    这直接违背了上一点的建议,但是对于巨大的对象,您不希望它们永远停留在内存中。我指的是像 BitmapData 这样的东西,当你用完它们时(在可预见的 future ),将它们拆掉并清零,然后让垃圾收集器清理它。

    当您再次需要它们时,重建它们。是的,您的性能会受到轻微影响,但移动设备上的内存非常宝贵,不要浪费它,因为它只保留一个只出现在加载屏幕上的 2mb 位图数据对象。扔掉它。

  4. 取消不再需要的引用

    花些时间尝试真正理解垃圾收集器需要做什么,以及它如何决定哪些对象可以丢弃,哪些不可以丢弃。尽量避免自引用对象/循环引用,虽然 CG 通常可以弄清楚,但有时可能需要一点手。

  5. 每次使用new时进行评估[相关2]

    再次使用内存分析器将有助于这一步,但要确保每次实例化一个新对象时,都需要实例化一个新对象。为 PC 开发时很容易偷懒,只是将新对象扔到池中,让 CG 整理出来。如果它很小,看看是否有好的缓存策略(对象池,或只是引用缓存)。如果它是一个您经常构建和拆除的巨大对象,那么可能是时候尝试提出更好的架构解决方案了。

据我所知,如果你到了 iOS 认为内存不足的地步,那已经太晚了。上次我检查过,框架会在它认为内存不足时尝试运行 CG,如果它不能释放足够的内存来继续,它就会失败。尽最大努力避免达到操作系统认为唯一安全的选择是终止线程的地步。

关于ios - Air for iOS - 如何处理由于内存有限导致的崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10129618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com