【问题标题】:What's exactly behind / inside iPhone memory management?iPhone内存管理背后/内部到底是什么?
【发布时间】:2011-11-26 08:57:06
【问题描述】:

这个问题不是关于 iphone 内存管理中的保留/释放内容。我非常了解例程,并且我的应用程序中没有内存泄漏的事情。

当我使用 Activity Instruments 监控我的应用程序的整体内存活动时,我会弹出标题中显示的问题。

仪器始终显示我的应用正在使用的“实际内存”量一直在 21 MB 到 30MB 之间,从未更高。我觉得这个数额相对来说不大。但是,有时,我的应用程序会给出 1 级或 2 级内存警告(永远不会崩溃,并且我不会在代码中针对此警告执行任何操作)。

所以我想知道 iphone 内存背后的真正原因是什么。我的意思是,真正的记忆是唯一触发警告的东西吗?还是我应该处理的整个内存中还有其他东西(例如虚拟内存,如 Instruments 中所示)?

虽然我的应用从来没有因为内存问题而崩溃,但这个警告(尤其是 2 级警告)真的让我很恼火,让我害怕一旦我将来公开它就会崩溃。

有什么帮助吗?

谢谢

【问题讨论】:

  • 我认为内存级别警告也是由于后台运行了大量其他应用程序,因此由于您的应用程序内部发生的各种事件会推动阈值,因此您可能会累积触发此类警告。当然,如果您可以在应用程序的 didReceiveMemoryWarning: 方法中采取一些步骤,例如释放任何缓存的数据,那么这将有所帮助。
  • @Luke,是的,我也怀疑过。如果前台应用需要更多内存,我也认为ios会杀死其他后台应用?
  • 是的,我相信这是真的 - 努力从 Apple 的内存管理指南中找到引文...
  • @Luke,Apple 的内存管理只是告诉我们如何保留/释放(最重要的是),但没有更深入的信息。我认为 iOs 会杀死后台应用程序,因为苹果文档要求我们实现 applicationWillTerminate 委托

标签: iphone ios memory-management virtual-memory


【解决方案1】:

存在内存警告是为了告诉您的应用您已接近极限。它们不一定是“坏”东西——许多应用程序只是忽略它们。

关于何时触发内存警告的实际实现细节并不重要,实际上会因设备而异。 iPhone 4 可能有 512MB 的 RAM 可供使用,但 3GS 将只有一半。

也就是说,关于内存警告,有一些事情值得了解:

  • 总体可用内存量达到一定水平时触发内存警告
  • 这些级别未记录。所以你不知道 1 级警告和 2 级警告之间有什么区别,除了事实 2 比 1 更糟糕(更紧急)
  • 内存警告不是特定于应用程序的。向当前正在运行且未挂起的所有应用程序发送内存警告。因此,您可能不直接负责触发。
  • 当收到内存警告时,系统将尝试代表您释放内存

同样,确切的实现细节没有记录在案,您不需要关心它们。内存警告是您通过释放任何不需要的对象来帮助系统的机会。

【讨论】:

  • 好答案。我想正如你所说,没有人真正知道内存警告发生了什么,或者深入到 iOs 内存中。无论如何,“内存警告不是特定于应用程序的。”这句话对我帮助很大。
猜你喜欢
  • 2011-04-10
  • 2011-10-10
  • 2010-10-28
相关资源
最近更新 更多