Когда я создаю 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);
}
Итак, у меня большая утечка памяти, если я не реорганизую весь свой кодвыпустить также растровые данные, а не только контекст?