如果 UIViewController 成功取消分配,没有保留周期?

If a UIViewController is successfully de-allocated, no retain cycles?

我试图在我的代码中避免循环保留,但我有一个我不确定的问题。任何见解将不胜感激。

如果成功释放 UIViewController,这是否也意味着 viewController 中的所有 class 对象也已成功从内存中释放?

我使用了下面的函数来判断一个 UIViewController 是否已经被释放

deinit{}

如果您的 ViewController 具有来自任何 class 对象的强引用,那么您的 ViewController 不能被取消分配。

根据 Apple document

An instance is no longer needed, ARC frees up the memory used by that instance so that the memory can be used for other purposes instead. This ensures that class instances do not take up space in memory when they are no longer needed.

如果 UIViewController 外部存在对 UIViewcontroller 的 class 对象之一的强引用,则该 class 对象将不会从内存中释放。

If a UIViewController is successfully de-allocated, does this also mean that all class objects within the viewController have also been successfully released from memory?

没有。 可能 发生,但 class 对象是引用类型。如果有对 class objects within the viewController 中任何一个的任何其他引用,该对象将继续存在。事实上,这应该发生是至关重要的。如果,比如说,另一个视图控制器正在引用这个对象,并且对象突然不存在只是因为 this 视图控制器被释放,那将是一场彻底的灾难。