如果 UIViewController 成功解除分配,没有保留周期?

问题描述

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

如果一个 UIViewController 被成功解除分配,这是否也意味着 viewController 中的所有类对象也已经成功地从内存中释放了?

我使用以下函数来确定 UIViewController 是否已被取消分配

deinit{}

解决方法

如果您的 ViewController 具有来自任何类对象的强引用,则您的 ViewController 无法取消分配。

据 Apple document 称:

不再需要实例,ARC 会释放该实例使用的内存,以便将内存用于其他目的。这样可以确保类实例在不再需要时不会占用内存空间。

,

如果一个 UIViewController 被成功解除分配,这是否也意味着 viewController 中的所有类对象也已经成功地从内存中释放了?

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

,

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...