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

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

Использует ли iO несмежное или непрерывное распределение в управлении памятью? предположим, если пользователь выделяет более 128 МБ, будет ли приложение закрыто? или память будет управляться iOS, как если бы пользователь выделял память и пропуски освобождались в методе Deallocate? возможно ли использовать более 120 МБ в приложении с использованием четко определенного распределения структуры данных?

4b9b3361

Ответ 1

Блоки из отдельных распределений памяти не выделяются смежно (отдельные вызовы alloc, malloc, new и т.д.). В противном случае они распределяются смежно (от одного и того же вызова до malloc, например, new float [30]). Согласно Apple, ваше приложение рискует быть закрытым для использования памяти, когда вы используете более 20 МБ оперативной памяти. На практике, однако, вы можете добраться до...

  • 260 МБ оперативной памяти на iPad 2 (спасибо RobCroll)
  • 170-180 МБ оперативной памяти на устройствах с общим объемом 512 МБ (iPhone 4, iPod touch 4g)
  • 40-80 МБ оперативной памяти на устройствах с 256 МБ оперативной памяти (iPad, iPhone 3gs, iPod touch 3g)
  • 25 Мб на устройстве с 128 МБ оперативной памяти (IPhone 3g, iPhone 2g, iPod touch 1g-2g)

Если вам действительно нужно "много" для мобильного приложения, вы действительно должны сохранить данные в временном файле и выполнить свою обработку. Легкий способ сделать это - использовать файлы с отображением памяти.

Ответ 2

Вы можете использовать память < емкость вашего устройства

(например, вы используете 40 Мб ОЗУ, а затем выделяете 80 Мб больше для некоторые короткие вычисления). В этом случае iOS убьет ваше приложение немедленно. 1

Список результатов тестирования пользователей с помощью этого инструмента:

устройство: (количество сбоев/общее количество/процент от общего количества) 2

  • iPad1:127MB/256MB/49%
  • iPad2: 275MB/512MB/53%
  • iPad3: 645MB/1024MB/62%
  • iPad4: 585MB/1024MB/57% (iOS 8.1)
  • iPad Mini 1st Generation: 297MB/512MB/58%
  • iPad Mini retina: 696MB/1024MB/68% (iOS 7.1)
  • iPad Air: 697MB/1024MB/68%
  • iPad Air 2: 1195MB/2048MB/58% (iOS 8.x)
  • iPad Pro 12.9: 3064MB/3981MB/77% (iOS 9.3.2)
  • iPad Pro 9.7 ": 1395MB/1971MB/71% (iOS 10.0.2 (14A456))
  • iPod touch 4-го поколения: 130 МБ /256 МБ/51% (iOS 6.1.1)
  • iPod touch 5-го поколения: 286MB/512MB/56% (iOS 7.0)
  • iPhone4: 325MB/512MB/63%
  • iPhone4S: 286MB/512MB/56%
  • iPhone5: 645MB/1024MB/62%
  • iPhone5S: 646MB/1024MB/63%
  • iPhone6: 645MB/1024MB/62% (iOS 8.x)
  • iPhone6 ​​+: 645MB/1024MB/62% (iOS 8.x)
  • iPhone6s: 1396MB/2048MB/68% (iOS 9.2)
  • iPhone6s +: 1195MB/2048MB/58% (теоретический, непроверенный)
  • iPhoneSE: 1395MB/2048MB/69% (iOS 9.3)
  • iPhone 6s +: 1392MB/2048MB/68% (iOS 10.2.1)
  • iPhone 7+: 2040MB/3072MB/66% (iOS 10.2.1)

1fooobar.com/questions/52797/...

2fooobar.com/questions/52797/...

Дополнительную информацию можно найти на question.

Ответ 3

Под капотом iOS использует malloc и друзей для выделения памяти для каждого объекта, поэтому да возвращенная память действительно смежная. Если вы попытаетесь выделить более доступную непрерывную память, вызов malloc вернет NULL (и, возможно, что-то еще не удастся при попытке получить доступ к нулевому указателю, если он не был правильно проверен)

Ответ 4

В настоящее время управление памятью в iOS работает без четкого ограничения памяти для приложения. Но вы можете справиться с ситуацией, когда iOS сообщает вашему приложению немедленно освободить память или она будет закрыта.

Ответ на предупреждения с низкой памятью в iOS

128 МБ - довольно большой блок памяти для iOS. в случае, если вы попытаетесь выделить ограничение по памяти, приложение будет закрыто без каких-либо уведомлений.

Ответ 5

Я не знаю, имеет ли ограничение использования памяти приложения 128 МБ или нет. Но если вы потребляете больше памяти, ваше приложение получит предупреждения о памяти. Если вы обрабатываете их и очищаете кеш и другие объекты, которые вы можете создать позднее, ваше приложение не будет закрыто. Если вы проигнорируете их, ваше приложение прекратит работу.