应用程序可能从后台返回什么样的“僵尸”?

时间:2011-07-30 08:36:34

标签: ios iphone memory background

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

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

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

3 个答案:

答案 0 :(得分:1)

一旦应用程序进入后台并且系统需要更多内存,它就会杀死后台应用程序,在此之前您的应用程序将不会收到任何消息。所以它的全部或全部。

然而,iOS的内存管理支持例如在内存警告的情况下取消分配视图对象和延迟娱乐(当您的应用仍处于活动状态时,请检查UIViewController docs didRecieveMemoryWarning系统本身如何处理内存警告)

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

当iOS开始杀死应用程序时,它可能会使用自己的算法,这并不是必然会杀死最旧的应用程序 - 它可能也会用于最大的应用程序记忆力有更大的影响...

答案 1 :(得分:0)

iOS将在后台运行时根据需要剔除UIKit数据(例如图像视图)和任何内存中的NSCache。您不必担心恢复此问题。

但是,您仍应管理自己的对象和内容;当您收到内存警告等适当的事件时,处理剔除和恢复数据。

答案 2 :(得分:0)

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