我知道ViewController
只有在不再需要时才会调用deinit
方法(例如,在放松segue和后续解雇后)。
但我想知道deinit
在应用程序生命周期的上下文中的行为。
1)当(应用程序状态为active / inactive / background / etc)时(如果有的话),如果应用程序由于内存限制而被系统终止,则deinit
会被调用
2)当(应用程序状态为活动/非活动/后台/等)时,如果用户通过最近使用的应用程序屏幕终止应用程序,则deinit
会被调用
3)当(应用程序状态为活动/非活动/后台/等)时(如果有的话),如果用户接受来电将应用程序移至后台,则会deinit
被调用
4)当(应用程序状态为活动/非活动/后台/等)时,如果应用程序被用户打开另一个应用程序移动到后台,则会deinit
被调用
答案 0 :(得分:2)
当应用程序突然终止时(您的情况为1或2),通常不会调用任何代码,包括任何deinit代码。因为所有应用程序内存都被立即释放,所以不需要deinit。
否则,当不再需要对象时调用deinit
,这与外部事件无关,无论应用程序是在前台还是在后台。它仅取决于您作为程序员释放对象的所有权(例如,当您弹出导航控制器或关闭所呈现的控制器时)。
答案 1 :(得分:1)
deinit是Swift类的底层方法,不是UIKit的一部分,因此与视图生命周期没有直接关系,即:
在取消分配类实例之前立即调用deinitializer。
(来自The Swift Programming Language)
所以一般情况下,在你的所有例子中,deinit都不会被调用(除非你在任何一种情况下专门删除对ViewController的所有强引用,即便如此,只有在ARC赶上它之前执行停止)。
另请注意,如果您仍然具有对ViewController的强引用(通常由reference cycle无意引起),则另一个展开segue的示例将不会导致deinit调用。