В основном вы должны освободить свои ссылки, особенно CGImageRef, поскольку imageWithCGImage не берет на себя ответственность за CGImage, а скорее копирует данные внутри.
Документы по этому вопросу довольно неясны, но из чегоЯ обнаружил в своем тестировании, что если я не выпущу CGImageRefs и CGDataProviderRefs, это в конечном итоге приведет к тому, что приложение получит предупреждения о памяти ... и затем произойдет сбой.
Не уверен, почему у вас произошел сбой, но при выполнениибыстрый тест с:
UIImageView *view = [[UIImageView alloc] init];
int I = 128;
unsigned char *topologyImage = malloc(I*I*4*sizeof(unsigned char));
for(int i=0; i<I*I*4; i++)
{
topologyImage[i] = 100;
}
for(int i=0; i<1000; i++)
{
CGColorSpaceRef colorSpaceRef=CGColorSpaceCreateDeviceRGB();
CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaLast;
CGColorRenderingIntent renderingIntent=kCGRenderingIntentDefault;
CGDataProviderRef provider=CGDataProviderCreateWithData(NULL,topologyImage,(I*I*4),NULL);
CGImageRef imageRef=CGImageCreate(I,I,8,4*8,4*I,colorSpaceRef,bitmapInfo,provider,NULL,false,renderingIntent);
CGColorSpaceRelease(colorSpaceRef);
CGDataProviderRelease(provider);
UIImage *img=[UIImage imageWithCGImage:imageRef];
view.image = img;
CGImageRelease(imageRef);
}
free(topologyimage);
Мне кажется, что это нормально работает, так что все, что вызывает ваш сбой, похоже, происходит из-за чего-то вне вашего примера, например, как вы загрузили данные изображения вtopologyImage