Подтвердить что ты не робот

Сколько памяти может использовать одно приложение для iOS?

... когда он находится на переднем плане.

Для оригинального iPad с 256 МБ ОЗУ я обнаружил, что мое приложение может использовать до 100-140 МБ, прежде чем оно будет убито.

Какая ситуация сейчас? Я мог бы пойти купить кучу iDevices и сделать сам тест, но я хотел проверить: кто-нибудь сделал тест?

Я понимаю, что у этого нет точного ответа, и я ищу диапазон, например: "Приложения убиты, когда они используют 300-350 МБ на устройстве с 512 МБ. Вы можете безопасно использовать до 300 МБ".

В частности:

  • На устройстве с 512 МБ памяти, сколько может использовать одно приложение?

  • На устройстве с памятью 1 ГБ, как можно использовать одно приложение?

  • Есть ли разница между вышеуказанным? Является ли каждое отдельное приложение ограниченным объемом памяти в интересах сохранения нескольких приложений в фоновом режиме или может использовать приложение переднего плана для вывода всех фоновых приложений из памяти и принимать все 1 ГБ (или 512 МБ) для себя (и OS, конечно)?

  • Имеет ли значение, является ли устройство iPad или iPhone? Если я подключу свое приложение к iPad с памятью 512 МБ, значит ли это, что он также будет работать на iPhone с 512 МБ памяти и наоборот? Я знаю, что UIViews и их базы поддержки Core Animation будут занимать больше памяти на iPad из-за большего размера экрана, но кроме этого, является ли ситуация с памятью одинаковой между iPhone и iPad с той же памятью?

Я имею в виду общую память, используемую процессом - кучу, стек, статические данные, код, резервные хранилища Core Animation и т.д.

Если вы склонны говорить, что это зависит от версии ОС, вы можете предположить, что мы говорим о iOS 7.

Я знаю, что использование слишком большого количества памяти означает, что когда мое приложение переходит в фоновый режим, iOS быстрее его завершает. Сейчас я в порядке с этим компромиссом.

4b9b3361

Ответ 1

Я написал тестовое приложение, которое измеряет, сколько памяти может выделить приложение, прежде чем оно будет убито. Вот цифры:

  • iPhone 5s (iOS 10, режим отладки, 1 ГБ памяти): можно выделить 600 МБ
  • iPad Air 2 (iOS 11.4, 2 ГБ памяти): 1,3 ГБ можно выделить
  • iPhone X (iOS 11.4, 3 ГБ памяти): 1,2 ГБ можно выделить
  • iPhone 7 Plus (iOS 12.1, 3 ГБ памяти): 1,8 ГБ можно выделить
  • iPad 13 дюймов (iOS 11.4, 4 ГБ памяти): можно выделить 3 ГБ

Интересно, что я никогда не получал предупреждение памяти.

Вот код, если вы хотите запустить тест самостоятельно:

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

Это не работает на симуляторе. Все, что касается производительности, должно быть проверено на устройстве.

Ответ 2

По состоянию на 2014 год мое минимальное аппаратное тестирование - это iPhone 4s, работающий под управлением iOS7 с установленными 50 приложениями. После перезагрузки ОС может освободить 200 МБ из общей суммы 512. После недели регулярного использования, лучше всего это может быть 100 МБ.

Я разрабатываю приложение Adobe AIR, которое не принимает предупреждения о низкой памяти из ОС. Если он приближается к пределу, он падает. Поэтому старайтесь оставаться под 100 МБ, если вы хотите запускать устройства с 512 МБ общего бара. Помните, что это связано с объединением gpu и cpu.

Ответ 3

Привет, я только что протестировал с моим приложением, для устройства с 512 МБ приложение будет аварийно завершено в любое время после использования 250 МБ, что даст вам проблему с "давлением памяти".