У меня большая проблема, и я не очень хорошо понимаю, почему она возникает. Дело обстоит так:
- Есть большой проект в Cocos2D с 10 сценами. Каждая сцена - это страница книги с огромными спрайтами. Используется реализация Kobold2D 1.0.2.
- Каждая страница имеет общие объекты в классе синглтон, чтобы поместить общее меню через LayerColor.
- Спрайты - это TexturePacker в PVR.CCZ RGBA4444 и в памяти iPad
занимают около 16-20 Мб каждый загруженный спрайт-лист.
- Я использую CCTransitionTurnPage для replaceScene для одной сцены к следующей.
- В методе init каждой страницы (класса) загружаю текстуру и FrameFile.
- В методе onExit каждой страницы (класса) выгружаем текстуры и FrameFile. Я использовал dumpCachedTextureInfo и сказал, что текстуры прекрасно загружаются и выгружаются из памяти.
- Конечно, я удаляю из дочерних объектов все объекты. Все мои спрайты являются общими переменными, объявленными в секции interface в .h, потому что мне нужно обращаться к ним в каждом методе класса.
- Мой проект сделан с интеграцией Kobold2D в проект ARC (но вы знаете, что в прикрепленном проекте Kobold2D ARC не включен из-за проблемы совместимости)
Дело в том, что когда я запускаю проект, все кажется идеальным, но память увеличивается для каждой сцены (страницы), которую я делаю. Страница 1: 30 Мб., Страница 2: 40, Страница 3: 54, Страница 4: 65... После 7 или 8 сцен, Instruments, Xcode или сам iPad вешают приложение без каких-либо сообщений (кроме Instruments с финальным предупреждением о низком уровне памяти).
Почему не происходит освобождения памяти после каждой сцены? Возможно, это из-за ARC и отсутствия переменной super dealloc. Почему текстуры выгружаются отлично, но кажется, что выгрузки нет, потому что память растет без контроля до самого краха?
задан skolima 11 February 2012 в 08:06
поделиться