У меня есть функция, которая принимает некоторые растровые данные и возвращает 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 документах мне нужно будет вызывать выпуск на обоих последних, потому что они происходят из функций Create, но могу ли я сделать это до использования UIImage?) Предположительно, я могу использовать обратный вызов dealloc провайдера для очистки буфер пикселей, но что еще?
Спасибо!