......当它在前景时。
对于拥有256MB RAM的原始iPad,我发现我的应用程序在被杀之前最多可以使用100-140MB。
现在的情况如何?我可以去买一堆iDevices并自己做一个测试,但我想检查一下:有人做过测试吗?
我知道这没有一个确切的答案,而且我正在寻找一个范围,例如:“应用程序在512MB设备上使用300-350MB时会被杀死。您可以放心使用高达300MB。” / p>
具体做法是:
在具有512MB内存的设备上,一个应用程序可以使用多少?
在内存为1GB的设备上,一个应用程序如何使用?
以上是否有区别?为了在后台保留一些应用程序,每个应用程序是否限制为固定数量的内存,或者前台应用程序可以从内存中踢出所有后台应用程序,并将整个1GB(或512MB)带到自身(以及OS,当然)?
该设备是iPad还是iPhone?如果我让我的应用程序在具有512MB内存的iPad上运行,是否意味着它也适用于具有512MB内存的iPhone,反之亦然?我知道UIViews和他们的核心动画支持商店会因为更大的屏幕尺寸而在iPad上占用更多内存,但除此之外,iPhone和具有相同内存的iPad之间的内存情况是否相同?
我指的是进程使用的总内存 - 堆,堆栈,静态数据,代码,Core Animation后备存储等。
如果您倾向于说它取决于操作系统版本,您可以假设我们正在谈论iOS 7。
我知道使用太多内存意味着当我的应用程序进入后台时,iOS会更快地终止它。我现在对这个权衡很好。
答案 0 :(得分:28)
我写了一个测试应用程序来测量应用程序在被杀之前可以分配多少内存。以下是数字:
有趣的是,我从未收到过记忆警告。
如果您想自己运行测试,请输入以下代码:
import UIKit
let sizeInMb = 100
class Wrapper {
var array = [UInt8](repeating: 0, count: sizeInMb * 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 * sizeInMb) MB allocated")
sleep(1) // Give the OS a chance to kill other processes.
}
return true
}
func applicationDidReceiveMemoryWarning(_ application: UIApplication) {
print("Memory warning!")
}
}
答案 1 :(得分:12)
截至2014年,我的最低硬件测试设备是运行iOS7的iPhone 4s,安装了约50个应用程序。重启后,操作系统可以从512个中释放200mb。经过一周的常规使用后,它可以管理的最好的是100mb。
我正在开发一个Adobe AIR应用程序,它不会从操作系统收到低内存警告。如果它接近极限,它就会崩溃。因此,如果您想在总共512mb的设备上运行,请尽量保持在100mb以下。请记住,这是针对gpu和cpu组合的。
答案 2 :(得分:8)
您好我刚刚使用我的应用进行测试,对于512MB设备,该应用程序将在250mb使用后随时崩溃,给予&#34;内存压力&#34;问题。
答案 3 :(得分:-1)
如果其他人感兴趣:
在配备 6 GB RAM (AFAIK) 的 iPhone 12 Pro 上,它在终止前分配了 2800 MB(几乎一半)。赞一个