Qual é o padrão de gerenciamento de memória correto para buffer-> CGImageRef-> UIImage?
Eu tenho uma função que pega alguns dados de bitmap e retorna um UIImage * dele. Parece algo assim:
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];
}
Alguém pode explicar exatamente quem possui qual memória aqui? Quero limpar corretamente, mas não sei como fazê-lo com segurança. Os documentos são confusos quanto a isso. Se eufree
pixels no final desta função após criar a UIImage e, em seguida, usar a UIImage, eu falho. Se eu liberar o provedor ou o imageRef após criar a UIImage, não vejo uma falha, mas aparentemente eles estão passando os pixels o tempo todo, por isso estou preocupado em liberar esses estados intermediários.
(Eu sei por documentos do CF que eu preciso chamar a liberação nos dois últimos porque eles vêm das funções Create, mas posso fazer isso antes que a UIImage seja usada?) Presumivelmente, posso usar o retorno de chamada desalocado do provedor para limpar o buffer de pixels , mas o que mais?
Obrigado!