Какой правильный шаблон управления памятью для buffer-> CGImageRef-> UIImage?
У меня есть функция, которая принимает некоторые растровые данные и возвращает UIImage * из него. Это выглядит примерно так:
UIImage * makeAnImage()
{
unsigned char * pixels = malloc(...);
// ...
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, pixels, pixelBufferSize, NULL);
CGImageRef imageRef = CGImageCreate(..., provider, ...);
UIImage * image = [[UIImage alloc] initWithCGImage:imageRef];
return [image autorelease];
}
Может кто-нибудь объяснить точно, кому принадлежит какая память здесь? Я хочу убраться должным образом, но я не уверен, как это сделать безопасно. Документы на них неясны. Если яfree
пикселей в конце этой функции после создания UIImage, а затем использовать UIImage, я сбой. Если я освобождаю провайдера или imageRef после создания UIImage, я не вижу сбоя, но они, по-видимому, пропускают пиксели полностью, поэтому я осторожен в освобождении этих промежуточных состояний.
(Я знаю по документам CF, что мне нужно вызывать release для обоих последних, потому что они приходят из функций Create, но могу ли я сделать это до использования UIImage?) Предположительно, я могу использовать обратный вызов dealloc провайдера для очистки буфера пикселей а что еще?
Спасибо!