Swift 手动释放内存

今天发现 APP 中有几个包含手写控件的 ViewController 不会自动释放内存,即不会主动调用 deinit。通过在 ViewDidDisappear 中 添加 self.view = nil 可以触发调用 deinit 。但是无法区分是结束 ViewController 或者是进入后台。在 OC 时代可以使用下面代码来判断是否已经关闭视图。

if (![[self.navigationController viewControllers] containsObject: self])  
    {  
        // the view has been removed from the navigation stack, back is probably the cause  
        // this will be slow with a large stack however.  
    }  

在 Swift 中不能用 containsObject 了,最后发现直接判断 self.navigationController 即可达到同样的目的。

override func viewDidDisappear(animated: Bool) {
        super.viewDidDisappear(animated)
        
        if let nc = self.navigationController{
            // 在后台
        }else{
            // 已关闭
            // 触发 deinit
            self.view = nil
        }
    }

参考:http://blog.csdn.net/xiaochong2154/article/details/45603511

你可能感兴趣的:(Swift 手动释放内存)