2010-08-18 168 views
0

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

我认为我的iPod touch中有一个很好的256M,不太清楚,但我不知道系统进程占用了多少内存,也不知道在启动之前我可以安全使用多少内存内存问题。目前我的程序占用大约4 MB,这看起来相当高,但我想至少有一部分是不能停止的系统进程,或者高维护的东西,比如大型图形背景。使用。

总之,有人能给我一个很好的基准数据,我的应用程序应该针对任何给定时间内使用的最大内存量?如果这些差异显着,iPhone 4和iPad的数字也会很好。

-Ash

+0

[Memory在iPhone上使用限制]的可能重复(http://stackoverflow.com/questions/3448583/memory-uses-limit-on-iphone) – 2010-08-18 21:37:12

+0

这是一个很常见的问题,正如你可以想象的那样。上次它出现了,我给了我两分钱。这是在这里:http://stackoverflow.com/questions/3448583/memory-uses-limit-on-iphone/3449344#3449344 – 2010-08-18 20:34:09

回答

0

对于最后2天,我分析我的最新的应用程序的内存占用和我发现一个有趣的事实:

当应用程序收到内存警告,这将释放的观点是不目前可见。这会导致我的应用程序崩溃,因为我没有考虑到这一点。我原本以为它是释放已经被自动释放的对象,但这是不正确的。

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

iPad/iPhone 3GS拥有256MB,iPhone4拥有512MB,但并不意味着它的全部可用于一个进程。我记得在iOS 3.0早期,我的一个应用程序被32mb的操作系统终止。

+4

这些不是自动释放的对象被释放。自动释放的对象在释放自动释放池时被释放或释放。主池在当前运行循环结束时排空,而不是响应内存警告。很可能你看到的是不再在屏幕上显示的视图的解除分配(didReceiveMemoryWarning方法中的标准UIViewController响应)。另外,如果使用内存监视器工具,则会看到应用程序的真实大小远大于您描述的4.5 MB分配。 – 2010-08-18 21:41:42

+0

@Brad你是绝对正确的。它释放视图。 – bioffe 2010-08-19 03:44:36

1

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

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

2)iPhone4比以前的手机有更多的内存,但用户多任务,这是真正无礼,只是去镇内存使用。对于多任务处理来说,保持内存占用空间较低(这有助于在自己的应用程序处于后台时,内存越多,使用它的可能性就越大),这比每个处理都重要。 3)严肃对待内存警告并转储所有可能的东西。它会让您的应用程序运行更长时间,并再次帮助它在较长时间内保持在后台运行。