我有一个视图控制器(称为FirstVC),它使用segue转到另一个视图控制器(称为SecondVC)。在SecondVC中,我有一个PagingMenuController
,它是一个分页菜单库。 pagingMenuController本身具有要显示的视图控制器。
将视图控制器添加到pagingMenuController的代码:
fileprivate var pagingControllers: [UIViewController] {
return [viewControllerList,viewControllerMap]
}
将pagingMenuController添加到SecondVC的代码:
addChildViewController(pagingMenuController)
view.addSubview(pagingMenuController.view)
pagingMenuController.didMove(toParentViewController: self)
回到FirstVC的代码:
self.navigationController?.popViewController(animated: true)
每次去SecondVC并回到FirstVC,都会加载20MB的额外内存。让我们假设我这样做:
虽然我从导航控制器弹出视图控制器(SecondVC),但内存并不是免费的。我该怎么做以及我做错了什么?
答案 0 :(得分:0)
让我们开始明显。检查您的SecondVC是否有所谓的保留周期或强参考周期。可能是以下情况之一:
您在没有self
或weak
引用的SecondVC中的某个闭包中使用onowned
。因此,闭包具有对视图控制器的强引用,反之亦然。
你在SecondVC中有一些属性(具有强引用),通过其他一些实体(也有强引用)指向SecondVC。
因为这个SecondVC无法从内存中释放出来。而且你得到了内存泄漏。如果是这种情况,您需要中断保留周期。通常我们通过制作一个引用weak
来做到这一点。
有关详细信息,请参阅Resolving Strong Reference Cycles Between Class Instances。
如需更多帮助,请显示完整的视图控制器代码。