我有这个 View 层次结构
-
RouterDashboardViewController : RootViewController
-
RootViewController : UIViewController
当前,RouterDashboardViewController 实例位于导航堆栈中。当我重置 NavigationController 的 rootViewController 时,RouerDashboardInstance 仍然存在于内存中,因为我可以检查我的 deinit{}
方法没有被调用。下面是 Instruments 中的堆栈跟踪,但无法检测到我的 RouterDashboard 的任何原因实例没有被释放。我确信会有保留周期使 RouterDashboard 实例保持事件状态。另一件事是我不理解这些堆栈跟踪,因为 ViewDidLoad() 方法调用了多次。
最佳答案
某些内容对 RouterDashboardViewController
有很强的引用。有几件事需要检查...
您是否将其分配给变量?
- 您可能需要将其声明为
weak var ...
- 您可能需要将其声明为
它是另一个类的代表吗?
- 确保委托(delegate)属性也是
弱变量
- 确保委托(delegate)属性也是
它是否使用任何引用它的闭包
self
?- 将捕获列表添加到闭包的参数列表中(
[unowned self]
或[weak self]
)
- 将捕获列表添加到闭包的参数列表中(
关于ios - ViewController 未从内存中释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50582934/