使用自定义转场 Dismiss 模态视图控制器时,控制器会被完全移除吗?
关于自定义转场后模态视图控制器是否被完全移除的解答
嘿,放心哈!只要你是遵循系统标准的 dismissal 流程来实现自定义转场,你的第二个视图控制器会被完全移除的,下面给你拆解细节:
- 首先得明确:
UIViewControllerAnimatedTransitioning协议的作用仅仅是自定义转场的动画表现,比如动画时长、视图的滑动/渐变效果这些视觉层面的逻辑,它不会改变系统对视图控制器生命周期的底层管理逻辑。 - 当你调用
dismiss(animated:completion:)触发关闭操作时,系统会在自定义动画执行完成后,自动完成以下操作:- 把第二个VC从父控制器的子控制器列表中移除
- 将它的view从视图层级中彻底清除
- 如果没有其他外部强引用持有这个VC实例,系统会自动释放它的内存,完成销毁
- 唯一需要注意的例外情况:如果你在自定义转场的
animateTransition(using:)方法里,手动把这个VC的view添加到了其他视图层级,或者有其他对象(比如全局变量、其他控制器)强引用了它,那这个VC可能不会被销毁,但这不是自定义转场本身导致的,是额外的代码逻辑引发的问题。
简单来说,自定义转场只是换了个“退场动画”,系统对VC的销毁规则和默认转场是完全一致的~
内容的提问来源于stack exchange,提问作者Tigran Iskandaryan
相关产品推荐
相关产品推荐

