我有以下类构造函数
- (id)initForBlurringWithConstantMaskWithID:(int)maskid andSize:(CGSize)s{
self = [super init];
if (self) {
// some code
CGImageRef maskRef = [maskUI CGImage];
//Some code where maskRef is used
CGImageRelease(maskRef); // I won't ever use it again
}
return self;
}
但是,当用ARC释放对象时(对我来说),所有崩溃均与EXC_BAD_ACCESS(code = EXC_i386_GPFLT)一起崩溃,通常在访问“错误”地址时调用。
如果删除发布行,一切正常。无论如何,有人能解释为什么会这样吗?
我的猜测是ARC也在尝试删除maskRef,但找不到它,这会导致崩溃。
最佳答案
创建(CGImageCreate),复制或保留对象时,只需调用CGImageRelase。 [maskUI CGImage]
不要求新所有权,因此您不负责释放它。
解:
删除CGImageRelease(maskRef);
看到
https://developer.apple.com/library/mac/documentation/CoreFoundation/Reference/CFTypeRef/index.html#//apple_ref/c/func/CFRelease