【问题标题】:What kind of "zombie" an app might return from the background?应用程序可能从后台返回什么样的“僵尸”?
【发布时间】:2011-07-30 08:36:34
【问题描述】:

目前,我正在为应用商店构建我的第一个应用,因此我已阅读 here,该应用应使用少于 30 MB 的 RAM(iPhone 3G、iPhone 4)。我已经读到,在某个时间点,iOS 将开始通过从后台应用程序中随机杀死和释放声音、图像和其他资源来寻找资源。目前,我的应用程序使用了仪器中显示的约 5MB 的实时字节,但我对内存感到有些偏执:) 当应用程序针对 iPhone3G 和 iPhone4 使用少于 10MB 时,我是否安全?

问题是如果一个应用程序进入后台,那么 iOS 可以释放多少资源直到最终杀死它?如果我的应用程序进入后台,然后将启动 100 个或更多其他应用程序,那么我的应用程序会发生什么情况?我不相信 RAM 内存片对于我的应用程序来说是静态的,因为每个设备中的内存都是有限的。恕我直言,如果您开始循环打开一个新应用程序,将其发送到后台,打开另一个应用程序 - 那么设备 RAM 将在某个时间点完全使用。然后,理论上,如果您尝试打开一个新应用程序,那么一些最先打开的应用程序应该被 iOS 杀死......

目前,我正在使用纯 UIKit 构建小游戏,因此我使用了很多 UIView 和 UIViewImage 对象,我不确定如何处理这种理论上的情况。在进入后台期间,我的应用程序可能会加载很多游戏中的 UIViewImages、指向菜单 MVC 等的指针。我是否必须编写一些 reloadALL 方法来重新加载游戏的每一次和平?如果完全使用设备内存,如果 iOS 会杀死我的整个应用程序,一切都会好起来的。但如果 iOS 会在游戏或菜单对象中释放我的一些 UIViewImage,那将是不可接受的。在那种情况下,我不知道我的应用程序可能是哪种“僵尸”(“复活”后我的应用程序可能有多少条腿、手臂等)。请分享您的经验和想法:)

【问题讨论】:

    标签: ios iphone memory background


    【解决方案1】:

    一旦应用程序进入后台并且系统需要更多内存,它只会终止后台应用程序,并且在此之前您的应用程序不会收到任何消息。所以要么全有,要么全无。

    尽管如此,iOS 的内存管理支持例如在内存警告的情况下释放视图对象和延迟重新创建(当您的应用程序仍处于活动状态时,请检查 UIViewController docs didRecieveMemoryWarning 系统本身如何处理内存警告)

    现在,当您的应用进入后台时,您可以尝试实现类似的行为 - 同时释放一些内存(例如,您自己的缓存或可以延迟重新创建的元素),从而减少应用的内存占用。这样做可能有助于让您的应用在后台被杀死之前存活一点时间。

    当 iOS 开始杀死应用程序时,它可能会使用自己的算法,这不一定会杀死 最旧 应用程序 - 它也可能适用于 最大 应用程序内存有更大的影响...

    【讨论】:

      【解决方案2】:

      iOS 会在必要时在后台剔除 UIKit 数据(例如您的图像视图)和任何内存中的 NSCache。不过,您不必担心恢复它。

      但是,您仍然应该管理自己的对象和东西;当您收到适当的事件(例如内存警告)时处理剔除和恢复数据。

      【讨论】:

      • 谢谢。目前,我只知道一种处理内存警告的方法:主应用程序委托类中的方法“applicationDidReceiveMemoryWarning:”。你说的“处理剔除”是什么意思?处理内存警告的其他方法是什么?
      • 剔除只是“从内存中删除”的一种说法。我会在应用程序委托、视图控制器 (didRecieveMemoryWarning) 和 applicationDidResignActive 中处理内存警告。如果您正在寻找一种设计模式来简化此操作,请查看惰性实例化。
      【解决方案3】:

      我们不应该真正关心应用程序中使用的总图像。内存仅用于活动屏幕中的那些图像。

      【讨论】:

        猜你喜欢
        • 2011-03-14
        • 1970-01-01
        • 2011-04-29
        • 2015-06-02
        • 2013-04-11
        • 2013-05-01
        • 1970-01-01
        • 2019-10-22
        • 1970-01-01
        相关资源
        最近更新 更多