Какой правильный шаблон управления памятью для 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 провайдера для очистки буфера пикселей а что еще?

Спасибо!

Ответы на вопрос(4)

Ваш ответ на вопрос