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