我有一个自定义类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