当我将自己作为 -(void)dealloc 中的观察者移除时,我的 CALayer 子类发生崩溃:
- (void)dealloc {
[[NSUserDefaults standardUserDefaults] removeObserver:self forKeyPath:@"showColorLabels"];
[colorLabel release];
[_color release];
[super dealloc];
}
抛出异常。它说 self 没有被添加为观察者。这只发生在特定情况下,在调用 [CATransaction flush] 之后。
我使用 Instruments 查看对象的分配时间。它说它是通过调用 CALayerGetPresentationLayer() 分配的。我不确定这是如何工作的,但我猜这是我原始层的副本,所以从未调用过 init,也从未将我添加为观察者。
如何在移除自己之前检查我是否是观察者,或者判断我是否是表示层?
布里杰麦克斯韦