Pause & resume displayLink instead of invalidating & recreating.
Check [super isAnimating] in isAnimating, and make sure all image specific vars are reset in setImage:
runLoopMode string should use copy instead of strong.