Использует ли iO несмежное или непрерывное распределение в управлении памятью? предположим, если пользователь выделяет более 128 МБ, будет ли приложение закрыто? или память будет управляться iOS, как если бы пользователь выделял память и пропуски освобождались в методе Deallocate? возможно ли использовать более 120 МБ в приложении с использованием четко определенного распределения структуры данных?
Распределение памяти iOS - сколько памяти может быть использовано в приложении?
Ответ 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 МБ или нет. Но если вы потребляете больше памяти, ваше приложение получит предупреждения о памяти. Если вы обрабатываете их и очищаете кеш и другие объекты, которые вы можете создать позднее, ваше приложение не будет закрыто. Если вы проигнорируете их, ваше приложение прекратит работу.