我有以下类构造函数
- (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(代码= EXC_i386_GPFLT)而崩溃,这通常在"错误"正在访问地址。
如果我删除释放线,一切正常。无论如何,任何人都可以解释为什么会发生这种情况?
我的猜测是ARC也试图删除maskRef,但无法找到它并导致崩溃。
答案 0 :(得分:2)
您只需在创建(CGImageCreate),复制或保留对象时调用CGImageRelase。 [maskUI CGImage]
并未申请新的所有权,因此您不负责发布所有权。
解决方案:
放下CGImageRelease(maskRef);