首页 > 解决方案 > 由于内部保留周期,ViewController 没有被释放

问题描述

我的一些视图控制器在从视图中弹出后不会被释放。我已经摆脱了其他强引用,所以我留下了这个通过引用表单 _externalObjectsTableForViewLoading 保存的内部保留周期。这是一个私有的 UIViewController 属性,所以我无法自己清除它。我不知道 iOS 是否有 API 可以清除它,或者为什么在弹出视图控制器后它没有被清除。

我已经在 iOS 11 和 12 中以发布模式运行我的应用程序进行了测试。在 Instruments 中运行应用程序会呈现在 Xcode 中看到的相同楼梯模式,并保留视图控制器。

有任何想法吗?提前致谢!

保留周期

标签: iosswiftmemorymemory-leaksuiviewcontentmode

解决方案


在您的问题中,一个 viewController 是否正在访问另一个 viewController?我们的问题是在另一个 viewController 中有一个对回调的非弱引用。

正如您和其他帖子中提到的那样,它_externalObjectsTableForViewLoading是一个 viewController 私有属性,而是一个与故事板相关的属性。这使我认为您的代码通过回调或通过对其实例的直接属性引用对另一个作为视图控制器的对象具有强引用。


推荐阅读