我正在为一个更复杂的项目尝试一个简单的测试,但我很困惑为什么下面的代码会崩溃并给出 EXC_BAD_ACCESS 错误?
这是从 UIView 调用的。
- (void)testing {
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"ball.png" ofType:nil];
CGImageRef imageRef = [[[UIImage alloc]initWithContentsOfFile:imagePath]CGImage];
// CGImageRetain(imageRef);
UIImage *newImage = [[UIImage alloc]initWithCGImage:imageRef];
UIImageView *iv = [[UIImageView alloc]initWithImage:newImage];
[self addSubview:iv];
}
我的猜测是 CGImageRef 没有被保留,而是添加 CGImageRetain(imageRef); 没什么区别。
我还应该注意到这个项目已经打开了 ARC。
编辑
我做了更多测试,发现这与 ARC 直接相关,因为我创建了 2 个基本项目,仅包括上面的代码。第一个关闭 ARC 并且效果很好。下一个打开 ARC 并且 BAM 崩溃并出现相同的错误。有趣的是,我只有在崩溃前第一次运行项目时才收到实际的日志错误。
Error: ImageIO: ImageProviderCopyImageBlockSetCallback 'ImageProviderCopyImageBlockSetCallback' header is not a CFDictionary...