-(void)dealloc でオブザーバーとして自分自身を削除すると、CALayer サブクラスでクラッシュが発生します。
- (void)dealloc {
[[NSUserDefaults standardUserDefaults] removeObserver:self forKeyPath:@"showColorLabels"];
[colorLabel release];
[_color release];
[super dealloc];
}
例外がスローされます。self がオブザーバーとして追加されていないことを示しています。これは、[CATransaction フラッシュ] が呼び出された後、特定のケースでのみ発生します。
Instruments を使用して、オブジェクトがいつ割り当てられたかを確認しました。CALayerGetPresentationLayer() の呼び出しで割り当てられたことが示されています。これがどのように機能するかはわかりませんが、これは元のレイヤーのコピーであると思われるため、init が呼び出されることはなく、オブザーバーとして追加されることもありませんでした。
自分自身を削除する前に自分がオブザーバーであることを確認する方法、または自分がプレゼンテーション層であるかどうかを確認するにはどうすればよいですか?
ブリッジャー・マクスウェル