#objective-c #ios #crash #cocos2d-iphone
#objective-c #iOS #сбой #cocos2d-iphone
Вопрос:
В настоящее время я работаю над игрой для iPhone / iPad с использованием Cocos2D. На симуляторе он работает нормально и может работать часами без каких-либо проблем. Но на устройстве он работает некоторое время, а затем просто вылетает из ниоткуда. Консоль отладки не выдает сообщения об ошибке, ввод «bt» просто возвращает «Нет стека». и он не генерирует отчет о сбое. В основном это происходит при загрузке главного меню или нового уровня, но это может произойти и во время прохождения уровня.
Есть идеи о том, как это отладить?
Комментарии:
1. Похоже, это может быть утечка памяти. Вы проверили приложение с помощью инструмента «утечки»?
2. На самом деле это не решение, но вам следует проверить поведение приложения с помощью инструментов во время его запуска (выполнив команду Project -> Analyze) на вашем устройстве, чтобы увидеть, есть ли какие-либо подозрительные шаблоны использования памяти или другие подсказки для фиктивных ошибок.
3. На 99% это утечка памяти.
4. Утечка памяти, у меня та же проблема, что и с моим приложением, просто запустите начальный анализ, чтобы получить представление об утечке, очистите проект, затем проанализируйте, на симуляторе он может работать часами без проблем, потому что в основном у вас есть доступная для работы память компьютеров.
5. Я проанализировал это с помощью инструментов на симуляторе (при каждой загрузке меню / уровня происходит утечка около 50 КБ). Случайный сбой происходит только на старых устройствах. Запуск на устройстве через инструменты сейчас.
Ответ №1:
Вам действительно следует прочитать об управлении памятью в objective-c
Когда я впервые переключился на программирование на objective-c (с C # / Java background), у меня тоже было много проблем. Как только я понял управление памятью в objective-c, у меня редко возникают проблемы такого рода. Я не использую arc.
Всякий раз, когда вы выделяете и инициализируете объект, количество сохранений равно 1. Вы должны помнить, чтобы освободить эти объекты в какой-то момент. Если вы используете другие методы, то вы получаете объект автоматического выпуска. Таково соглашение.
Время, которое вы сэкономите, действительно того стоит.