viewDidDisappear是否在主线程?生命周期中执行UX操作需检查主线程吗?
关于viewDidDisappear线程相关的两个问题解答
1. viewDidDisappear是否运行在主线程?
在正常的视图生命周期流程中(比如通过导航控制器的push/pop、模态视图的present/dismiss这些标准UIKit操作触发时),viewDidDisappear绝对是运行在主线程的。
UIKit的核心设计原则之一,就是所有与视图生命周期绑定的回调方法,都会由系统调度在主线程执行——毕竟UI操作必须在主线程完成,这些生命周期钩子作为UI状态变化的通知入口,自然也遵循这个规则。
当然,如果是你手动调用viewDidDisappear方法(非常不推荐这种违背生命周期设计的操作),那线程就取决于你调用时所在的线程了,但这种情况属于非常规场景,不在日常开发的常规考虑范围内。
2. 正常视图生命周期中调用viewDidDisappear时,执行UX相关操作是否安全?需要检查主线程吗?
完全安全,不需要额外检查当前是否处于主线程。
因为正常触发的viewDidDisappear本身就在主线程,而所有UX相关操作(比如更新UI控件、展示弹窗、执行过渡动画等)都要求在主线程执行,所以直接在这个方法里编写相关逻辑就好,不用担心线程安全问题。
不过要留意:如果你的viewDidDisappear里包含异步任务(比如发起网络请求、后台计算),当这些任务完成后需要更新UI时,你还是需要手动切换回主线程——但这是异步回调的线程问题,和viewDidDisappear本身的执行线程无关。
内容的提问来源于stack exchange,提问作者Rob Bonner
相关产品推荐
相关产品推荐

