来自imageWithCGImage的UIImage不保留指针(EXC_BAD_ACCESS)

时间:2017-02-02 22:41:11

标签: objective-c uiimageview uiimage cgimage cgimageref

我有一个自定义类Frame,可以从多个来源获取图像数据。该类可以生成UIImage。问题是当在屏幕上绘制生成的UIImage时,它会与EXC_BAD_ACCESS崩溃。

Callstack为空,它以start-> main-> UIApplicationMain结束。

我认为它与CGImageCreate有关,并且指针不会以某种方式保留。但我很难搞清楚原因。 XCode调试器在通过UIImage作为子视图添加之前显示UIImageView存在,但在它崩溃之后。我还尝试使用UIView将其直接绘制到自定义drawRect,但它在EXC_BAD_ACCESS处与drawRect崩溃。

任何想法都将不胜感激!

以下是代码:

UIImage *image = [UIImage imageNamed:@"test.png"];

// To NSData
CGImageRef imageRef = image.CGImage;
CFDataRef dataRef = CGDataProviderCopyData(CGImageGetDataProvider(imageRef));
const unsigned char *pixels = CFDataGetBytePtr(dataRef);
const signed long length = CFDataGetLength(dataRef);

NSData *data = [NSData dataWithBytes:pixels length:length];
CGFloat width = CGImageGetWidth(imageRef);
CGFloat height = CGImageGetHeight(imageRef);
CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);

// NSData to UIImage
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGDataProviderRef dataProviderRef =
CGDataProviderCreateWithData(NULL, data.bytes, data.length, NULL);
CGImageRef imageRef2 =
CGImageCreate(width, height, 8, 32, 4 * width, colorSpaceRef, bitmapInfo,
              dataProviderRef, NULL, NO, kCGRenderingIntentDefault);

UIImage *image2 = [UIImage imageWithCGImage:imageRef2];

CGColorSpaceRelease(colorSpaceRef);
CGDataProviderRelease(dataProviderRef);
CGImageRelease(imageRef);

//Show UIImage
UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.frame];
imageView.image = image2;
//Breakpoint here shows that `image2` is equal to `image`
[self.view addSubview:imageView];
//EXC_BAD_ACCESS

0 个答案:

没有答案