我正在试验Swift中的内存泄漏,我希望在调用didReceiveMemoryWarning()函数时清除内存。
我的应用在底部有一个标签栏,每个标签栏都有自己的navigationController
。从该控制器,视图被推入堆栈。
如果我收到内存警告,我会弹出导航控制器中的每个视图(参见示例)
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
for var i = viewControllers.count; i > 0; i-- {
popViewControllerAnimated(false);
}
}
所有视图都已成功删除,并且" root视图"显示每个选项卡,但在我再次按下选项卡之前,内存不会释放。
有没有人知道我做错了什么?
答案 0 :(得分:2)
首先,您不应该将视图控制器从堆栈中弹出,因为iOS擅长内存管理,并且一旦不需要它就会自动释放视图。
其次,您收到内存警告,因为您可能正在创建引用循环,因为您正在使用对视图控制器的强引用。尝试使用可以解决问题的弱引用。
这解释了swift中的内存管理,并解释了如何创建引用周期以及如何使用weak关键字来防止内存周期。 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html