iOS 在调用完成块之前会在 viewDidDisappear 之后等待 CATransaction

Posted

技术标签:

【中文标题】iOS 在调用完成块之前会在 viewDidDisappear 之后等待 CATransaction【英文标题】:iOS will CATransaction wait after viewDidDisappear before calling the completion block 【发布时间】:2017-11-13 00:22:17 【问题描述】:

在调用完成块之前,CATransaction 会在 viewDidDisappear 之后等待吗?

  CATransaction.begin()
    view_controller.navigationController?.popViewController(animated: false)
    CATransaction.setCompletionBlock 
        self.call_some_function()
    
    CATransaction.commit()

如果 view_controller 有自定义 viewDidDisappear 函数,self.call_some_function() 会在 viewDidDisappear 函数执行完成后执行吗?

我尝试设置断点,结果 viewDidDisappear 确实在完成块之前执行。不确定这种行为是否总是可以预测的,因为我找不到任何文档。

【问题讨论】:

你试过了吗,结果如何? 以上更新。是的,事实证明 viewDidLoad 在完成块之前执行。 【参考方案1】:

尝试在弹出视图控制器之前设置完成块

CATransaction.begin()
CATransaction.setCompletionBlock 
    self.call_some_function()

view_controller.navigationController?.popViewController(animated: false)
CATransaction.commit()

CATransaction.setCompletionBlock 
    self.call_some_function()

CATransaction.begin()
view_controller.navigationController?.popViewController(animated: false)
CATransaction.commit()

【讨论】:

以上是关于iOS 在调用完成块之前会在 viewDidDisappear 之后等待 CATransaction的主要内容,如果未能解决你的问题,请参考以下文章

数据库调用会在触发器完成之前返回吗?

在 iOS 11 中,UIViewController 的 transitionFromViewController 从不调用它的完成块

ios - UIView.animateWithDuration 的交互式过渡完成块从未在 animateTransition 内部调用

IOS/Objective-C:调用完成块的语法

静态代码块

NGINX_ I/O 模型