问题描述
我试图避免在我的代码中保留循环,但我有一个我不确定的问题。任何见解将不胜感激。
如果一个 UIViewController 被成功解除分配,这是否也意味着 viewController 中的所有类对象也已经成功地从内存中释放了?
我使用以下函数来确定 UIViewController 是否已被取消分配
deinit{}
解决方法
如果您的 ViewController 具有来自任何类对象的强引用,则您的 ViewController 无法取消分配。
据 Apple document 称:
不再需要实例,ARC 会释放该实例使用的内存,以便将内存用于其他目的。这样可以确保类实例在不再需要时不会占用内存空间。
,如果一个 UIViewController 被成功解除分配,这是否也意味着 viewController 中的所有类对象也已经成功地从内存中释放了?
没有。这可能发生,但类对象是引用类型。如果存在对任何 class objects within the viewController
的任何其他引用,该对象将继续存在。事实上,这应该发生是至关重要的。如果,比如说,另一个视图控制器引用了这个对象,而这个对象仅仅因为这个视图控制器被释放而突然不存在,那将是一场彻头彻尾的灾难。
如果在 UIViewController 外部存在对 UIViewController 类对象之一的强引用,则该类对象不会从内存中释放。