【问题标题】:iPhone: How much memory usage is too much? [closed]iPhone:多少内存使用量太大了? [关闭]
【发布时间】:2010-08-18 20:02:00
【问题描述】:

我猜这是一个非常奇怪的问题,但我以前从来没有真正处理过内存分配,所以现在我真的很偏执于使用太多内存或忘记释放东西。我发现了非常有用的内存泄漏工具(并且很自豪地看到,至少到目前为止,我没有丢失任何东西)以及我假设的分配工具,用于测量有多少内存被用完在应用程序运行时的任何给定点。但是,我不确定我应该用掉多少内存。

我认为我的 iPod touch 中有一个不错的 256M,不太确定,但我不知道其中有多少被系统进程占用,也不知道在我开始遇到内存不足之前我可以安全使用多少问题。目前我的程序占用了大约 4 MB,这对于它正在做的事情来说似乎相当高,但我想至少其中一些是无法停止的系统进程,或者像大型图形背景这样的高维护性的东西使用。

简而言之,有人可以给我一个好的基准数据,我的应用程序应该以在任何给定时间使用的最大内存量为目标吗? iPhone 4 和 iPad 的数据也会很好,如果它们相差很大的话。

-灰

【问题讨论】:

标签: iphone ipad ios4 ipod


【解决方案1】:

没有硬性答案。有几点需要注意:

1) 如果您的应用程序随着时间的推移使用越来越多的内存,那么它会比大多数时间正确释放内存但会犯一些错误的应用程序更快地被杀死。不要忘记有一个看门狗进程有一个(看似)复杂的杀死应用程序的公式,并且不同的应用程序可以在不同的内存使用级别出于不同的原因被杀死。

2) iPhone4 的内存比以前的手机多很多,但是由于用户同时处理多任务,所以只用内存就去城里是很不礼貌的。对于多任务处理,保持低内存占用比其他任何事情都更重要(当您自己的应用程序在后台时,它会有所帮助,使用的内存越多,它被杀死的可能性就越大)。

3) 认真对待内存警告,并尽可能转储所有内容。这将使您的应用程序运行更长时间,并再次帮助它在后台运行更长时间。

【讨论】:

    【解决方案2】:

    在过去的 2 天里,我正在分析我的最新应用程序的内存占用情况,我发现了一个有趣的事实:

    当应用程序收到内存警告时,它会释放当前不可见的视图。这会导致我的应用程序崩溃,因为我没有考虑到这一点。我最初认为它正在释放已自动释放的对象,但这是不正确的。

    如果我重新启动手机,它可以在堆中处理高达 8mb 的数据而不会发出任何警告。我猜在 iOS4 中,这也取决于你在后台运行了多少东西。我在 iPhone4 上有 iOS 4.0.1。

    iPad/iPhone 3GS 有 256mb,iPhone4 有 512mb,但这并不意味着它们都可用于进程。我记得在早期的 iO​​S 3.0 中,我的一个应用程序在 32mb 时被操作系统终止。

    【讨论】:

    • 这些不是被释放的自动释放对象。自动释放的对象在其自动释放池被释放或耗尽时被释放。主池在当前运行循环结束时被耗尽,而不是响应内存警告。您最有可能看到的是屏幕上不再显示的视图的释放(didReceiveMemoryWarning 方法中的标准 UIViewController 响应)。此外,如果您使用 Memory Monitor 工具,您会发现应用程序的实际大小远大于您描述的 4.5 MB 分配。
    • @Brad 你是绝对正确的。它释放视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多