Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory leaks CaKeyframeAnimation在解除视图控制器后在后台保持_Memory Leaks_Repeat_Cashapelayer_Cakeyframeanimation - Fatal编程技术网

Memory leaks CaKeyframeAnimation在解除视图控制器后在后台保持

Memory leaks CaKeyframeAnimation在解除视图控制器后在后台保持,memory-leaks,repeat,cashapelayer,cakeyframeanimation,Memory Leaks,Repeat,Cashapelayer,Cakeyframeanimation,嗨,我有简单的CAShapeLayer动画 let ballFrameAnimation = CAKeyframeAnimation() aBall.removeFromSuperlayer() self.view.layer.addSublayer(aBall) ballFrameAnimation.keyPath = "position" ballFrameAnimation.duration = 3.0 ballFrameAnimation.calcul

嗨,我有简单的CAShapeLayer动画

   let ballFrameAnimation  = CAKeyframeAnimation()
   aBall.removeFromSuperlayer()

  self.view.layer.addSublayer(aBall)

  ballFrameAnimation.keyPath =  "position"
  ballFrameAnimation.duration = 3.0
  ballFrameAnimation.calculationMode = kCAAnimationDiscrete  
  ballFrameAnimation.fillMode = kCAFillModeForwards
  ballFrameAnimation.isRemovedOnCompletion  = true
  ballFrameAnimation.delegate = self
通过回调来保持重复

func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {

  let name = anim.value(forKey: "name") as? String
  if name == "form" {
      attachAnimation()
       forwardDirection = !forwardDirection

  }
但是,即使我将viewcontroller从堆栈中弹出,这种情况仍会持续并在后台循环(高速)。它还显示了仪器上的内存泄漏

 @IBAction func unwindDismiss(_ sender: Any) {

 aBall.removeAnimation(forKey: "ballAnimation")
 aBall.removeFromSuperlayer()
navigationController?.popToRootViewController(animated:true)
dismiss(animated: true, completion: nil)
}
这很简单

不停循环动画不会通过简单地关闭viewcontroller来释放,因此它会保留在背景中

加入

if navigationController?.topViewController == self {
动画中的循环检查没有停止循环。 这不仅修复了加速的背景循环,还修复了内存泄漏。还有一个警告:当重复使用仪器时:经常关闭并重新启动它们,同时清理构建,否则可能会出现虚假泄漏