У меня есть метод, который анализирует данные пикселей внутри NSBitmapImageRep, который построен из CGImageRef. Вот соответствующий код:Огромная утечка памяти в NSBitmapImageRep
CGImageRef ref;
// omitted code for initializing ref
NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithCGImage:ref];
uint32* bitmapPixels = (uint32*) [bitmapRep bitmapData];
// do stuff with bitmapPixels
[bitmapRep release];
CGImageRelease(ref);
Я знаю, что я правильно отпуская CGImageRef и NSBitmapImageRep, но вызов -bitmapData утечки примерно в 2 Мб каждый раз, когда это называется, и я не знаю, как правильно освободить Это. Есть идеи?
Обновление: Я забыл добавить один важный момент: память только просочилась, когда работает полноэкранное приложение. Для регулярного использования память выдается просто отлично.
Быстрый просмотр ссылки указывает на то, что -bitMapData просто возвращает указатель на данные в объекте bitmapRep и поэтому не нужно его выпускать. Можете ли вы включить сборку мусора и посмотреть, что произойдет потом? Это может дать вам некоторые подсказки. –
Решение @Tony Ken, кажется, выпускает данные, как только вы закончите с ним. Без пула, похоже, что Mac просто выпускает эти данные всякий раз, когда захочет. – pop850