我有一个启用ARC的Cocoa应用程序。我正在使用OS 10.8和Xcode 4.4。该应用程序崩溃偶尔在通话CGLayerRelease,倾销的消息像下面这样安慰:CGLayerRelease崩溃
error for object 0x10a2d2000: entry for pointer being freed from death-row vanished
如果我注释掉调用CGLayerRelease的崩溃停止。我是否需要在启用ARC的项目中调用CGLayerRelease?文件不是很清楚。
很难为此发布代码,因为它遍布在一个大型文件中,用于从NSView继承的类。该班有一个数据成员CGLayerRef layer;
。然后里面的drawRect功能:
if (layer == nil) {
layer = CGLayerCreateWithContext(context, self.frame.size, NULL);
// draw some stuff into CGLayerGetContext(layer)
}
CGContextDrawLayerInRect(context, self.bounds, layer);
类也是其窗口的代表,并具有以下功能
- (void)windowDidEndLiveResize:(NSNotification *)notification {
if (layer) {
//CGLayerRelease(layer);
layer = nil;
}
[self setNeedsDisplay:YES];
}
而且属性setter现在里面
- (void)setPitch:(NSArray *)aPitch {
pitch = aPitch;
if (layer) {
//CGLayerRelease(layer);
layer = nil;
}
}
如果我取消拨打CGLayerRelease
,然后我偶尔得到上面提到的崩溃。我强调“零星”,因为它并不总是发生。
可能会显示一些导致问题的代码? – Vladimir 2012-07-29 14:55:25