A: 

Your assumption is difficult to verify without Apple's source code. When you call addAnimation:forKey:, the CALayer makes a copy of the animation object. There is no guarantee from the API (in the docs or elsewhere) that it will release a running animation when another is added for the same key. It would be much safer for you to explicitly call removeAnimation:forKey: rather than relying on the API to do what you want.

Also, why have you set removedOnCompletion to NO in the code above? The default behavior of a CAAnimation is to remove itself from the layer once it has completed, and then call animationDidStop:finished: on the delegate. You can then add any other animation to the layer with the same key. Isn't this exactly what you're trying to do? It seems like you might be over thinking it a little.

As for your question about reusing animations: since the animation object is copied when added to a CALayer, you can hold a reference to an animation object that you create and keep adding it to as many layers as you want as many times as you like.

neror