¿Cuál es el patrón de administración de memoria correcto para el búfer-> CGImageRef-> UIImage?

Tengo una función que toma algunos datos de mapa de bits y devuelve un UIImage * de ella. Parece algo así:

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];
}

¿Alguien puede explicar exactamente quién posee qué memoria aquí? Quiero limpiar adecuadamente, pero no estoy seguro de cómo hacerlo de forma segura. Los documentos están borrosos en estos. Si yofree píxeles al final de esta función después de crear el UIImage, y luego usar el UIImage, cuelgo. Si libero al proveedor o a imageRef después de crear el UIImage, no veo una falla, pero aparentemente están pasando los píxeles hasta el final, por lo que estoy asustado por la liberación de estos estados intermedios.

(Sé por documentación de CF que debería necesitar llamar a release en las dos últimas porque vienen de las funciones Create, pero ¿puedo hacer eso antes de que se use UIImage?) Presumiblemente, puedo usar la devolución de llamada dealloc del proveedor para limpiar el buffer de píxeles pero que mas

¡Gracias!

Respuestas a la pregunta(4)

Su respuesta a la pregunta