Я столкнулся с такими же проблемами в отношении управления памятью.
Corona сообщает нам, что вы используете библиотеку Composer, она будет автоматически обрабатывать память и объекты, но это не так.
Попробуйте удалить каждый объект сцены вручную в фазе Hide () и установите для этой группы ссылку nil.
Вы можете использовать следующий блок кода для определения утечки памяти в вашем приложении / игре.
Утечка памяти:
Это концепция постоянного увеличения использования памяти из-за ненужного выделения памяти. Утечка, как говорят, происходит, как только память в устройстве исчерпана, любая попытка выделить больше памяти приводит к тому, что приложение прекращает работу, или это отрицательно влияет на производительность.
В короне можно использовать следующую функцию для проверки выделения памяти:
локальная функция printMemUsage ()
local memUsed = (collectgarbage("count"))/1000
local texUsed = system.getInfo("textureMemoryUsed")/1000000
print("\n---------MEMORY USAGE INFORMATION---------")
print("System Memory Used:", string.format("%.03f", memUsed), "Mb")
print("Texture Memory Used:", string.format("%.03f", texUsed), "Mb")
print("------------------------------------------\n")
return true
конец
Runtime: addEventListener ("enterFrame", function () collectgarbage ("step") end)
timer.performWithDelay (2000, printMemUsage, -1)
Существует ограничение на максимальный размер текстуры, поддерживаемый устройством. Если вы превысите этот предел, текстура автоматически уменьшится, чтобы соответствовать максимуму. Вы можете использовать команду system.getInfo ("maxTextureSize"), чтобы определить максимальный размер текстуры для конкретного устройства. См. System.getInfo () для получения дополнительной информации.
Предотвращение утечки памяти:
Избегайте перегрузки памяти:
Старайтесь не загружать слишком много изображений в одну сцену lua.
Обработка глобалов:
Не забудьте выгрузить глобальные переменные. В основном используйте локальную переменную.
Освободите память:
Перед переключением на другую сцену удалите все ненужные таймеры, переходы слушателей событий времени выполнения, экранные объекты.
Используйте следующий метод, чтобы освободить память
timer.cancel (timer_name); timer_name = nil - удалить таймеры
transition.cancel (tran_name); tran_name = nil - удалить переходы
display_object: removeSelf (); display_object = nil - удалить экранные объекты
runtime: removeEventListener () - удалить слушатели времени выполнения
Утилизируйте все аудиофайлы, когда они больше не нужны:
audio.dispose (audio_name); audio_name = nil - для удаления аудиофайлов.
Если вам нужно задать или перевести определенное свойство нескольких экранных объектов в одно и то же значение - например, изменить полное меню наложения на alpha = 0 - лучше добавить объекты в группу отображения и изменить свойство вся группа. Код проще, и он оптимизирует память и скорость.
Хотя избегать глобальных переменных и функций не всегда возможно, минимальное использование является наилучшей практикой. Доступ к локальным переменным и функциям просто быстрее, особенно в критичных ко времени подпрограммах.
-Спасибо
Assif