我有以下类构造函数

- (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

09-10 04:49