一个iOS应用程序可以使用多less内存?

…当它在前台。

对于原始的iPad,256MB RAM,我发现我的应用程序可以使用高达100-140MB才被杀死。

现在情况如何? 我可以去买一堆iDevices,自己做一个testing,但我想检查:有没有人做过testing?

我知道这并没有一个确切的答案,而我正在寻找一个范围,例如:“在512MB设备上使用300-350MB的应用程序会被杀死,最多可以安全使用300MB”。

特别:

  1. 在具有512MB内存的设备上,一个应用程序可以使用多less?

  2. 在具有1GB内存的设备上,一个应用程序如何使用?

  3. 上面有没有区别? 为了保持less量的应用程序在后台,每个应用程序都被限制在一个固定数量的内存中,或者前台应用程序能够从内存中将所有后台应用程序踢出,并将整个1GB(或512MB)操作系统,当然)?

  4. 这个设备是iPad还是iPhone? 如果我的应用程序在512MB内存的iPad上工作,这是否意味着它也可以在512MB内存的iPhone上工作,反之亦然? 我知道UIViews和他们的Core Animation后备存储器会在iPad上占用更多的内存,因为屏幕尺寸较大,但除此之外,iPhone和iPad之间的内存情况是一样的吗?

我指的是进程使用的全部内存 – 堆,堆栈,静态数据,代码,Core Animation后台存储等。

如果你倾向于说它取决于操作系统版本,你可以假设我们正在谈论iOS 7。

我知道使用太多的内存意味着,当我的应用程序进入后台,iOS将终止更快。 我现在没有这个权衡。

截至2014年,我的最低硬件testing设备是安装了约50个应用程序的运行iOS7的iPhone 4s。 重新启动后,操作系统可以释放总共512个中的200MB。 经过一周的正常使用,最好能pipe理的是100MB。

我正在开发一个Adobe AIR应用程序,它不会从操作系统收到低内存警告。 如果接近极限,则会崩溃。 所以如果你想在512MB总RAM的设备上运行,请尽量保持在100MB以下。 请记住,这是为了GPU和CPU的结合。

我写了一个testing应用程序,测量一个应用程序在死亡之前可以分配多less内存。 这里是数字:

  • iPhone 5s(1GB内存):可以分配600MB
  • iPad Air 2(2GB内存):可分配1.3GB
  • iPhone 7 Plus(3GB内存):可以分配2GB
  • iPad 13英寸(4GB内存):2.7GB可以分配

所有设备都运行iOS 10,并且该应用程序处于debugging模式。 (回想起来,我应该使用释放模式。)

在每个设备上,我做了两次跑步,拿走了两次中的较低者,保守。

有趣的是,我从来没有收到过内存警告。

我还发现一个空的应用程序消耗9MB的内存。 这是如果你创build一个UIWindow,但别的什么都别的 – 没有视图控制器,没有makeKeyAndVisible()。

如果你想自己运行testing,这里是代码:

import UIKit class Wrapper { var array = [UInt8](repeating: 0, count: 100 * 1048576) // 100 MB } @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { window = UIWindow(frame: UIScreen.main.bounds) var i = 0 sleep(5) // So that you can see how much memory it consumes before any allocations. while true { let w = Wrapper() Unmanaged<Wrapper>.passRetained(w) i += 1 print("\(i)th allocation done") sleep(1) // Give the OS a chance to kill other processes. } return true } func applicationDidReceiveMemoryWarning(_ application: UIApplication) { print("Memory warning!") } } 

嗨,我刚刚testing了我的应用程序,对于512MB的设备,应用程序将在任何时候崩溃后使用250MB,给“内存压力”的问题。