为了避免模态行为,我允许用户中断正在运行的CABasicAnimation
,并且在此应用程序的上下文中,用户的操作会调用现有CALayers
应该存在的新状态不复存在。我不是在使用ARC(也许这是我的问题,但请耐受这个老派问题)。
当用户采取行动时,对于一组活跃的CALayers
我执行此操作:
for(CALayer *c in layerArray){
[c removeAllAnimations];
[c removeFromSuperlayer];
[c release];
}
[layerArray removeAllObjects];
(相信我,无论好坏,这都不是CALayers
的过度释放。但是,从该例程返回并将控制权交还给系统后,系统会调用内部操作系统例程run_animation_callbacks并崩溃,因为它正在尝试向僵尸发送消息 - 已删除并释放的CALayers
之一。为什么[c removeAllAnimations]
不足以告诉操作系统停止在该对象上运行回调?
感谢。
答案 0 :(得分:0)
想出来,留下答案,以防其他人有用。
当删除CAAnimation
时(在上面的代码中使用removeAllAnimations
调用),它会调用委托的animationDidStop:finished:
方法告诉委托该动画已被中断。 (有趣的是,即使你在删除动画时将CALayer's
委托设置为nil也是如此)。
所以你不能removeAllAnimations
同时释放对象。相反,我认为animationDidStop:finished:
方法必须有一些方法来检测它是否应该正常处理。