一个iOS应用程序可以使用多少内存?[英] How much memory can one iOS app use?

本文是小编为大家收集整理的关于一个iOS应用程序可以使用多少内存?的处理方法,想解了一个iOS应用程序可以使用多少内存?的问题怎么解决?一个iOS应用程序可以使用多少内存?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

...当它在前台时.

对于具有 256MB RAM 的原始 iPad,我发现我的应用在被杀死之前最多可以使用 100-140MB.

现在是什么情况?我可以去买一堆 iDevices 自己做一个测试,但我想检查一下:有人做过测试吗?

我知道这没有准确的答案,我正在寻找一个范围,例如:"应用程序在 512MB 设备上使用 300-350MB 时会被终止.您最多可以安全地使用 300MB."

具体来说:

  1. 在512MB内存的设备上,一个应用能用多少?

  2. 在1GB内存的设备上,一个应用怎么能用?

  3. 以上有区别吗?是否每个单独的应用程序都限制在固定数量的内存中以便将一些应用程序保留在后台,或者前台应用程序是否可以从内存中踢出所有后台应用程序,并将整个 1GB(或 512MB)留给它自己(以及操作系统,当然)?

  4. 设备是 iPad 还是 iPhone 是否重要?如果我的应用程序可以在内存为 512MB 的 iPad 上运行,是否意味着它也可以在内存为 512MB 的 iPhone 上运行,反之亦然?我知道 UIViews 和它们的 Core Animation 后备存储会因为更大的屏幕尺寸而在 iPad 上占用更多内存,但除此之外,iPhone 和具有相同内存的 iPad 之间的内存情况是否相同?

我指的是进程使用的总内存——堆、堆栈、静态数据、代码、Core Animation 后备存储等.

如果您倾向于说它取决于操作系统版本,您可以假设我们谈论的是 iOS 7.

我知道使用太多内存意味着当我的应用程序进入后台时,iOS 会更快地终止它.我现在可以接受这种权衡.

推荐答案

我编写了一个测试应用程序,用于测量应用程序在被终止之前可以分配多少内存.以下是数字:

  • iPhone 5s(iOS 10,调试模式,1GB内存):可分配600MB
  • iPad Air 2(iOS 11.4,2GB 内存):可分配 1.3GB
  • iPhone X(iOS 11.4,3GB内存):可分配1.3GB
  • iPhone 7 Plus(iOS 10,调试模式,3GB 内存):可分配 2GB
  • 13 英寸 iPad(iOS 11.4,4GB 内存):可分配 3GB

有趣的是我从来没有收到内存警告.

如果你想自己运行测试,下面是代码:

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!")
    }
}

本文地址:https://www.itbaoku.cn/post/924675.html