【问题标题】:iPhone abnormal memory usage in real deviceiPhone真机内存使用异常
【发布时间】:2011-07-21 17:08:50
【问题描述】:

我有一个基于导航的应用程序,我使用“init with nib name”推送 uitableviews。

我用仪器测试了应用程序,没有泄漏,在所有分配菜单中,我看到大约 2-3 MB 的实时字节。当我开始导航并浏览 30 页时,在 Instruments 中,我可以从“实时字节”中看到,它为每个推送的 uitableview 添加了大约 40 KB,我认为这很正常。

然后我想在我的 IOS4 手机和我在应用商店中找到的免费活动监视器应用程序中对其进行测试。好吧,我可以看到,在每次推送中,设备中的总可用内存减少了大约 800KB!

所以在 30 次推送之后,28 MB 的可用内存消失了,当我通过导航“返回”时,我可以看到内存再次被释放。

如果你愿意,我可以发布一些代码,但我找不到可以在我的 uitableView 中占用 800Kb 内存的内容,所有分配都已释放,我不分配任何图像文件。我只是发送几行信息以显示在表格中。

你有什么建议?哪些部分应该检查 mycode?或者这是正常的,推送的视图可能会占用数百 KB 的内存。因为如果我的应用中有 100 个页面,那么它可以增长到 100 Mb 的内存

谢谢

【问题讨论】:

    标签: iphone ios4


    【解决方案1】:

    我很确定,如果您使用“内存工具”(见图)检查 Instrument 中的内存,您将看到与使用免费 iphone 应用程序看到的内存使用情况大致相同。

    确实,根据我的经验,Instruments 会根据您使用的工具为您提供有关内存使用情况的不同信息;而且,不幸的是,内存工具是提供最“现实”估计的工具。我无法解释原因,但对于几 MB 的“活动字节”,您拥有更多 MB 的“真实内存”,这对我来说并不奇怪。

    无论如何,我不会担心。如果你达到 28MB 并且应用程序没有被杀死,你可能正在使用“后来”的设备(不是 iPod touch,也不是 iPhone 3);我猜如果您在旧设备上进行测试,总体内存占用可能会更低(即,您的应用程序会收到更多内存警告,如果一切都正确完成,则会卸载更多视图以释放更多内存)。

    IMO 重要的是,当您返回时,内存会恢复。理想情况下,它应该完全恢复,但这并不总是容易实现的。

    关于你的应用程序的整体内存消耗,我的想法是:

    1. 首先,您应该检查当您的应用程序收到内存警告时会发生什么;我希望您之前加载的许多视图将被卸载并恢复内存;您可以在控制器中覆盖didReceiveMemoryWarning 以记录它们已卸载(不要忘记调用super)并在需要时恢复内存(系统会知道何时这样做);正如我所说,我认为您的应用程序正在填满内存,因为它没有收到任何内存警告,关键是收到内存警告时会发生什么;如果内存恢复了,那就没问题了;问题是当您收到警告并且内存没有显着减少时;

    2. 如果问题仍然存在(即内存恢复机制无法正常工作),您可以在推送新的视图控制器之前考虑导航控制器中的 popping 视图控制器。如果这对你有用,你可以试试……

    【讨论】:

    • tnx 但这是一个提问应用程序,可能有数百个长文本问题,所以我的应用程序将增长到 80-100 Mb 的内存?这是可以接受的吗?或者可以在我的代码中修复什么,也许我做错了,因为我是初学者?
    • tnx 我向 didreceivememorywarning 和 didunloadview 发出了一些警报。并在真实设备中进行了测试,当我深入导航时,内存使用量高达 150 MB!但我没有收到任何警告??
    • 是哪个设备? iphone4和ipad2内存很大...根据免费的iphone应用,设备上还剩多少内存?
    • 越狱的iphone4,首先我打开了很多应用程序将总内存减少到30 MB,然后开始推送视图。当总可用可用内存达到 5 MB 时,不知何故它不会再低于了,但我可以继续推送视图而不会发出任何警告
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    相关资源
    最近更新 更多