美文网首页swift
Swift 手动释放内存

Swift 手动释放内存

作者: LukeYU | 来源:发表于2015-06-10 10:01 被阅读0次

今天发现 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 手动释放内存

    今天发现 APP 中有几个包含手写控件的 ViewController 不会自动释放内存,即不会主动调用 dein...

  • Ubuntu日常操作手册

    lv文件系统动态扩容 手动释放内存,注意此操作会清空内存数据 关于释放内存详细描述见此文章:ubuntu 手动释放...

  • ARC MRC

    内存的手动管理(MRC):手动引用计数器管理,申请到某一块内存,在使用之后,要手动释放;未释放内存,会造成内存的浪...

  • 《C语言》malloc函数使用

    动态分配、静态分配 静态分配:计算机随机自动分配内存,周期结束后自动释放内存动态分配:手动分配内存,手动释放内存 ...

  • 【16】内存管理机制

    1. 内存:栈区间、堆区间 栈:栈上的内存是系统自动开辟,自动释放堆:堆上的内存需要手动开辟,手动释放。但在pyt...

  • 15、【Swift】析构过程

    场景:Swift 也是使用自动引用计数(ARC) 处理实例的内存管理,实例释放不需要手动清理但是,用自己资源,需额...

  • iOS 内存管理底层探究

    内存管理方式: MRC:手动管理内存,需要开发人员管理内存,手动调用Release,以控制对象内存的释放。ARC:...

  • 自动引用计数器(ARC)

    Swift 使用自动引用计数(ARC)这一机制来跟踪和管理应用程序的内存通常情况下我们不需要去手动释放内存,因为 ...

  • Swift 自动引用计数(ARC)

    Swift 使用自动引用计数(ARC)这一机制来跟踪和管理应用程序的内存通常情况下我们不需要去手动释放内存,因为 ...

  • extern const static

    内存分区简介 | 内存分区 | 保存内容 | 是否可读写 | 是否手动释放 ...

网友评论

    本文标题:Swift 手动释放内存

    本文链接:https://www.haomeiwen.com/subject/zkrjqttx.html