ARCが有効になっているCocoaアプリがあります。OS10.8とXcode4.4を使用しています。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];
}
プロパティセッター内にも
- (void)setPitch:(NSArray *)aPitch {
pitch = aPitch;
if (layer) {
//CGLayerRelease(layer);
layer = nil;
}
}
ここで、への呼び出しのコメントを解除すると、CGLayerRelease
上記のクラッシュが散発的に発生します。いつも起こるとは限らないので、私は「散発的に」強調します。