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)setPitch:(NSArray *)aPitch {
pitch = aPitch;
if (layer) {
//CGLayerRelease(layer);
layer = nil;
}
}
지금은 주석을 해제하는 경우 속성 setter 내부 또한 다음과 같은 기능
- (void)windowDidEndLiveResize:(NSNotification *)notification {
if (layer) {
//CGLayerRelease(layer);
layer = nil;
}
[self setNeedsDisplay:YES];
}
있다 CGLayerRelease
에 대한 호출 다음 나는 산발적으로 위에서 언급 한 충돌을 얻습니다. 스트레스가 항상 발생하지는 않기 때문에 "산발적으로"스트레스를받습니다.
문제의 원인이되는 일부 코드가 표시 될 수 있습니까? – Vladimir