Текстуры не обрабатываются средой выполнения Obj-c, поэтому утечки ничего о них не знают. Вы должны использовать другой инструмент.
В Xcode запустите новый проект, используя шаблон OpenGL. Найдите метод, который обновляет / рисует сцену и добавьте этот код в конец:
static int tick = -1;
static GLuint tex[5];
if (tick++ < 0)
for (int f = 0; f < 5; f++)
tex[f] = 0;
tick = tick % 5;
if (tex[tick]) {
glDeleteTextures(1, &tex[tick]);
tex[tick] = 0;
} else {
glGenTextures(1, &tex[tick]);
glBindTexture(GL_TEXTURE_2D, tex[tick]);
char *mem = malloc(1024 * 1024 * 4);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
1024, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, mem);
free(mem);
}
Код генерирует и уничтожает пять текстур с помощью команд OpenGL. Создайте его и запустите один раз на вашем устройстве, чтобы убедиться, что оно установлено. Не беспокойся о пыхтении.
Теперь откройте инструменты и начните с пустого шаблона для iPhone. Откройте библиотеку и перетащите монитор памяти в окно. Нажмите на кнопку раскрытия информации и снимите все, кроме «Свободной физической памяти». Теперь выберите, чтобы запустить двоичный файл на вашем iPhone, чтобы начать запись. Вы должны увидеть, как лестница идет вверх / вниз в зависимости от того, когда Instruments пытается выполнить выборку приложения. Во время работы программы вы можете увидеть все активные процессы в столбце «Реальная память», показывающем фактическое использование памяти.
В моих тестах этот пример потребляет от 25 МБ до 3 МБ в зависимости от момента выборки памяти. Это с iPhone второго поколения и SDK 3.1. Если у вас есть 2.x SDK, вы должны искать размер резидентного объекта GART на обычном мониторе OpenGL. Подробнее см. http://blog.zincroe.com/2009/04/how-to-check-iphone-texture-memory-usage-with-instruments/.
В любом случае, перепрыгивание памяти вверх и вниз доказывает, что glDeleteTexture () работает так, как объявлено.