Огромная утечка памяти в NSBitmapImageRep - PullRequest
0 голосов
/ 14 ноября 2009

У меня есть метод, который анализирует пиксельные данные внутри NSBitmapImageRep, который построен из CGImageRef. Вот соответствующий код:

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 МБ, и я не знаю, как его правильно освободить. Есть идеи?

Обновление: Я забыл добавить один важный момент: память просачивается только тогда, когда запущено полноэкранное приложение. При регулярном использовании память освобождается просто отлично.

Ответы [ 2 ]

3 голосов
/ 03 февраля 2010

Вы делаете это в цикле? В этом случае вам может потребоваться создать пул авто-релизов, чтобы обеспечить своевременную очистку памяти. См. пулы с автоматическим выпуском .

0 голосов
/ 14 ноября 2009

Данные растрового изображения должны принадлежать либо CGImage, либо NSBitmapImageRep (или должны быть скопированы последним автоматически скрытым объектом NSData). Таким образом, какой бы объект ни владел (или копировал) объект, он должен его освободить.

Видите ли вы противоположные результаты в куче / инструментах?

...