- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们目前正在使用适用于 iOS 的 Air 开发 iPad 应用程序,但有时会遇到崩溃(仅在装有 iOS 5 的 iPad1 上),这似乎是因为该应用程序占用了太多内存。
如何在应用程序中捕获/处理此类错误?内存不足时如何通知?试图捕捉 flash.errors.MemoryError 似乎不起作用。有什么建议吗?
最佳答案
我在这方面做了一些工作,这里有一些我可以给你的提示。
获取 Flash Builder 4.6 Premium。
如果仅针对分析器,请获取它。它具有可用于诊断此类问题的最佳分析器之一。话虽如此,周围还有其他 Flash 分析器,它们具有不同程度的有用性。
仅此一项就可以帮助您找到并诊断大部分内存在原始内存使用方面的去向,还可以帮助您找到正在创建和销毁的对象数量,以及在垃圾收集器启动之前它们停留了多长时间终于抽出时间放手了。
池化较小的琐碎对象
与其不断地创建和销毁较小的对象,不如创建 object pools .这将为您节省不断启动新对象的成本,并使您不必等到垃圾收集器运行后再释放内存。
在 actionscript 中创建对象池有很多示例和模式可供引用。如果 AS 支持泛型会更容易,但即使没有泛型,它仍然非常简单。
及时处理大件元素
这直接违背了上一点的建议,但是对于巨大的对象,您不希望它们永远停留在内存中。我指的是像 BitmapData
这样的东西,当你用完它们时(在可预见的 future ),将它们拆掉并清零,然后让垃圾收集器清理它。
当您再次需要它们时,重建它们。是的,您的性能会受到轻微影响,但移动设备上的内存非常宝贵,不要浪费它,因为它只保留一个只出现在加载屏幕上的 2mb 位图数据对象。扔掉它。
取消不再需要的引用
花些时间尝试真正理解垃圾收集器需要做什么,以及它如何决定哪些对象可以丢弃,哪些不可以丢弃。尽量避免自引用对象/循环引用,虽然 CG 通常可以弄清楚,但有时可能需要一点手。
每次使用new
时进行评估[相关2]
再次使用内存分析器将有助于这一步,但要确保每次实例化一个新对象时,都需要实例化一个新对象。为 PC 开发时很容易偷懒,只是将新对象扔到池中,让 CG 整理出来。如果它很小,看看是否有好的缓存策略(对象池,或只是引用缓存)。如果它是一个您经常构建和拆除的巨大对象,那么可能是时候尝试提出更好的架构解决方案了。
据我所知,如果你到了 iOS 认为内存不足的地步,那已经太晚了。上次我检查过,框架会在它认为内存不足时尝试运行 CG,如果它不能释放足够的内存来继续,它就会失败。尽最大努力避免达到操作系统认为唯一安全的选择是终止线程的地步。
关于ios - Air for iOS - 如何处理由于内存有限导致的崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10129618/
我有一个关于复杂性的简单问题。我在 Java 中有这段代码: pairs是 HashMap包含 Integer作为键,它的频率为 Collection作为一个值。所以: pairs = new Has
对于我的应用程序,我需要在 Coq 中使用和推理有限映射。谷歌搜索我发现 FMapAVL 似乎非常适合我的需求。问题是文档很少,我还没有弄清楚我应该如何使用它。 作为一个简单的例子,考虑以下使用对列表
我有一个主表tblAssetMaster A和一个移动表tblMovement M。 我想提取所有 Assets 及其当前位置,因此需要获取每个 Assets 的最新移动条目。 字段 A: Asset
我想让我的网站内容居中,但仅限于网页的特定宽度。所以当它超过 500px 时,我希望内容被修复,无法进一步拉伸(stretch)。无论如何都要这样做,还是我最好把所有东西都修好?希望有意义的是添加一些
我正在尝试批量删除 Backbone 模型的集合,如下所示...... collection.each(function(model, i){ model.destroy(); }); 我发现当每
我想要一个软件环境,在其中我可以在具有特定资源的硬件上测试我的软件的速度。例如,当我的主机硬件是具有 12GB RAM 的 3GHz 四核 amd64 时,该程序在具有 24 Mb RAM 的 800
在 Eclipse 中,我得到了 BigInteger.valueOf(2).pow(31093) 的值,但没有得到 BigInteger.valueOf(2).pow(31094) 的值(它是空的)
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
我想将 2 个表从本地 sql server 2000 上传到托管的 mysql。第一个表有 17 列和 680 行,其他 10 列和 8071 行。 我首先使用 xampp mysql 尝试离线,它
我在 S3 中自动生成并保存了静态 html 文件。有时文件大小达到 2mb。是否可以使用javascript来获取html文件的一部分,显示它,当用户到达页面底部时,获取下一部分等等? 最佳答案 X
我是一名优秀的程序员,十分优秀!