Как правильно очистить память, когда создание CGContextRef?

Когда я создаю CGContextRef вручную с помощью CGBitmapContextCreate () , мне нужно вручную освобождать данные растрового изображения как ну?

Сейчас я делаю следующее: у меня есть метод, который создает и возвращает CGContextRef. Внутри этого метода я также создаю данные для этого контекста, например:

bitmapData = malloc(bitmapByteCount);
context = CGBitmapContextCreate(bitmapData, ...);
return context;

До сих пор я всегда считал, что все в порядке, когда вызывающий этот метод просто освобождает CGContextRef после его использования: CGContextRelease (theContext) ;

Из документации CGBitmapContextCreate :

В iOS 4.0 и новее, и Mac OS X v10.6 и новее, вы можете передать NULL, если вы хотите, чтобы Quartz выделял память для растровое изображение. Это освобождает вас от управление собственной памятью, которая уменьшает проблемы с утечкой памяти.

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

Итак, я должен сделать это:

void *data = CGBitmapContextGetData(context);
if (data != NULL) {
    free(data);
}

Значит, у меня здесь большая утечка памяти, если я не проведу рефакторинг всего моего кода, чтобы освободить также данные растрового изображения, а не только контекст?

5
задан Proud Member 17 June 2011 в 21:01
поделиться