#ios #memory
#iOS #память
Вопрос:
У меня есть игра для устройств iOS. За пару дней до этого у меня возникла проблема с памятью на разных устройствах.
Что я делаю: 1. Удалите с устройства мою игру. 2. «Продукт-> Очистить» его в xCode. 3. Запустите его на устройстве. 4. Посмотрите на память в инструментах (монитор активности). 5. Возьмите другое устройство. 6. Повторите с первого шага.
iPad 1 с iOS 4.3.1: игра работает нормально, 51 МБ памяти используется в главном меню, 105 МБ на первом уровне. iPad 1 с iOS 5, iPod 4 с iOS 5: сбой игры, 77 МБ в главном меню, 130 МБ на первом уровне.
У кого-нибудь такая же проблема? Это из-за более новой iOS?
31.10.2011 Шесть часов контрольных точек и переходов между устройствами дают мне следующее: в iOS 4.3.1 функция glTexSubImage2D, которую можно найти в OpenGLES.framework, никогда не выделяет никакой памяти.
Та же функция в iOS 5.0 вызывает
glTexSubImage_Exec ->
gleSynchronizeTextureLevelOnCurrentDevices ->
gfxUploadPluginTextureLevel ->
gfxAllocateTextureLevel ->
malloc
В конце концов, у меня были разные параметры пикселей в glTexImage2D и glTexSubImage2D, что привело к дополнительным 30% памяти для каждого из спрайтов. В 4.3.1 разница в параметре пикселей была в порядке, но в 5.0 это не так. Я не знаю, ошибка это или нет. Спасибо всем.
Комментарии:
1. Если произошел сбой, выясните, почему. Опубликуйте сообщения о сбое консоли и трассировку стека.
Ответ №1:
Вам нужно выяснить, куда на самом деле уходит ваша память. Инструменты — хорошее начало, но вы, вероятно, захотите сделать снимки в разных точках и сравнить. (Я предполагаю, что вы уже использовали инструмент утечки для выявления истинных утечек, а не только раздувания памяти.)
Комментарии:
1. хорошо, спасибо. Я решил проблему. Решение находится в тексте вопроса