内存泄漏迅速

时间:2015-05-28 16:06:14

标签: ios swift memory-leaks

我正在试验Swift中的内存泄漏,我希望在调用didReceiveMemoryWarning()函数时清除内存。

我的应用在底部有一个标签栏,每个标签栏都有自己的navigationController。从该控制器,视图被推入堆栈。

如果我收到内存警告,我会弹出导航控制器中的每个视图(参见示例)

override func didReceiveMemoryWarning() {
   super.didReceiveMemoryWarning()

    for var i = viewControllers.count; i > 0; i-- {
        popViewControllerAnimated(false);
    }        
}

所有视图都已成功删除,并且" root视图"显示每个选项卡,但在我再次按下选项卡之前,内存不会释放。

有没有人知道我做错了什么?

1 个答案:

答案 0 :(得分:2)

首先,您不应该将视图控制器从堆栈中弹出,因为iOS擅长内存管理,并且一旦不需要它就会自动释放视图。

其次,您收到内存警告,因为您可能正在创建引用循环,因为您正在使用对视图控制器的强引用。尝试使用可以解决问题的弱引用。

这解释了swift中的内存管理,并解释了如何创建引用周期以及如何使用weak关键字来防止内存周期。 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html