启用S​​wift编译器优化会导致自定义视图控制器转换中的EXC_BAD_ACCESS崩溃

时间:2017-02-16 12:29:00

标签: swift uikit exc-bad-access compiler-optimization transitions

为了在使用交叉溶解动画将视图控制器推送/弹出到导航堆栈时替换默认动画,我实现了符合协议UIViewControllerAnimatedTransitioning的自定义视图控制器转换。

这是我对动画功能的实现:

func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {

    guard let fromViewController = transitionContext.viewController(forKey: .from),
        let toViewController = transitionContext.viewController(forKey: .to) else {
        return
    }

    let animationView = transitionContext.containerView
    animationView.addSubview(toViewController.view) // 
    let duration = transitionDuration(using: transitionContext)

    fade(from: fromViewController.view, 
         to: toViewController.view, 
         duration: duration, 
         completion: {
        let didComplete = !transitionContext.transitionWasCancelled
        transitionContext.completeTransition(didComplete)
    })
}

使用我的 Debug 配置运行应用程序时,像魅力一样。但是,当使用我的 Release 配置运行它时,它会在标有的行中崩溃。

导致崩溃的区别在于 Swift编译器优化级别,其定义如下:

  • 调试: [-Onone]
  • 发布: 快速,整体模块优化 [-O -whole-module-optimization]

我真的认为整个模块优化对于我们的发布来说是个不错的主意。但我没有看到这里可能发布哪个变量并使用print语句我甚至检查过这一行中使用的所有变量都已正确设置,即animationView和{{1 }}。那么到底是怎么回事呢? 导致崩溃的“优化”是什么?

0 个答案:

没有答案