wake-up-neo.net

iOS Speicherzuordnung - wie viel Speicher kann in einer Anwendung verwendet werden?

Werden die IOs in der Speicherverwaltung nicht zusammenhängend oder zusammenhängend zugewiesen? Angenommen, wenn der Benutzer mehr als 128 MB zuweist, wird die App geschlossen? oder der Speicher wird von iOS so verwaltet, als würde der Benutzer Speicher zuweisen und die Zuordnung der Deallocate-Methode verpassen. Ist es möglich, mehr als 120 MB in der Anwendung zu verwenden, indem eine definierte Datenstrukturzuordnung verwendet wird?

36

Blöcke aus separaten Speicherzuordnungen werden nicht zusammenhängend zugewiesen (separate Aufrufe für Zuweisung, Malloc, New usw.). Andernfalls werden sie zusammenhängend zugeordnet (vom selben Aufruf an malloc, z. B. new float [30]). Laut Apple besteht die Gefahr, dass Ihre App aus Speichergründen herunterfährt, wenn Sie mehr als 20 MB RAM verwenden. In der Praxis kann man jedoch ungefähr ...

  • 260 MB RAM auf dem iPad 2 (Danke RobCroll)
  • 170-180 MB RAM auf Geräten mit 512 MB RAM insgesamt (iPhone 4, iPod touch 4g)
  • 40-80 MB RAM auf Geräten mit 256 MB RAM (iPad, iPhone 3gs, iPod touch 3g)
  • 25 MB auf dem Gerät mit nur 128 MB RAM (IPhone 3g, iPhone 2g, iPod touch 1g-2g)

Wenn Sie wirklich so viel RAM für eine mobile Anwendung "benötigen", sollten Sie die Daten wirklich in einer temporären Datei speichern und Ihre Verarbeitung darauf durchführen. Ein einfacher Weg, dies zu tun, ist die Verwendung von Dateien, die im Arbeitsspeicher zugeordnet sind. 

73
Skyler Saleh

Sie können Speicher <Kapazität Ihres RAM-Speichers verwenden

(Sie verwenden beispielsweise 40 MB RAM und weisen dann 80 MB mehr für. einige kurze Berechnungen zu). In diesem Fall würde iOS Ihre Anwendung beenden sofort.1

Liste der Ergebnisse, die von Benutzern gefunden wurden, die mit diesem Tool testen

Gerät: (Unfallbetrag/Gesamtbetrag/Prozentsatz des Gesamtbetrags)2

  • iPad1: 127 MB/256 MB/49%
  • iPad2: 275 MB/512 MB/53%
  • iPad3: 645 MB/1024 MB/62%
  • iPad4: 585 MB/1024 MB/57% (iOS 8.1)
  • iPad Mini 1. Generation: 297 MB/512 MB/58%
  • iPad Mini-Retina: 696 MB/1024 MB/68% (iOS 7.1)
  • iPad Air: 697 MB/1024 MB/68%
  • iPad Air 2: 1195 MB/2048 MB/58% (iOS 8.x)
  • iPad Pro 12.9: 3064 MB/3981 MB/77% (iOS 9.3.2)
  • iPad Pro 9.7 ": 1395 MB/1971 MB/71% (iOS 10.0.2 (14A456))
  • iPod touch 4. Generation: 130 MB/256 MB/51% (iOS 6.1.1)
  • iPod touch 5. Generation: 286 MB/512 MB/56% (iOS 7.0)
  • iPhone4: 325 MB/512 MB/63%
  • iPhone4S: 286 MB/512 MB/56%
  • iPhone5: 645 MB/1024 MB/62%
  • iPhone5S: 646 MB/1024 MB/63%
  • iPhone6: 645 MB/1024 MB/62% (iOS 8.x)
  • iPhone6 ​​+: 645 MB/1024 MB/62% (iOS 8.x)
  • iPhone6s: 1396 MB/2048 MB/68% (iOS 9.2)
  • iPhone6s +: 1195 MB/2048 MB/58% (theoretisch, nicht getestet)
  • iPhoneSE: 1395 MB/2048 MB/69% (iOS 9.3)
  • iPhone 6s +: 1392 MB/2048 MB/68% (iOS 10.2.1)
  • iPhone 7+: 2040 MB/3072 MB/66% (iOS 10.2.1)
  • iPhone X: 1392/2785/50% (iOS 11.2.1)

1 https://stackoverflow.com/a/5887783/5181636

2 https://stackoverflow.com/a/15200855/5181636

Weitere Informationen finden Sie auf dieser Frage .

59
Dipen Chudasama

Momentan funktioniert die Speicherverwaltung in iOS ohne eindeutige Speicherbegrenzung für eine Anwendung. Sie können jedoch die Situation handhaben, wenn iOS Ihrer App mitteilt, dass der Speicher sofort freigegeben wird, oder sie wird geschlossen.

Auf Warnmeldungen mit geringem Arbeitsspeicher in iOS reagieren

128 MB ist ein recht großer Speicherblock für iOS. Wenn Sie versuchen, ein Speicherlimit zuzuweisen, wird eine Anwendung ohne Benachrichtigungen geschlossen.

2
Evgeny Karpov

Unter der Haube verwendet iOS malloc und friends, um Speicher für jedes Objekt zuzuweisen. Daher ist der zurückgegebene Speicher tatsächlich zusammenhängend. Wenn Sie versuchen, mehr als verfügbaren zusammenhängenden Speicher zu reservieren, gibt der Malloc-Aufruf NULL zurück.

2
Giuliano Galea

Ich weiß nicht, ob die Speichergrenze für die Anwendung 128 MB beträgt oder nicht. Wenn Sie jedoch mehr Speicher verbrauchen, würde Ihre Anwendung Speicherwarnungen erhalten. Wenn Sie damit umgehen und den Cache und andere Objekte löschen, die Sie zu einem späteren Zeitpunkt erstellen können, wird Ihre Anwendung nicht beendet. Wenn Sie sie ignorieren, wird Ihre Anwendung beendet.

0
Krishnan