美文网首页
iOS Swift 关于内存管理需要注意的地方

iOS Swift 关于内存管理需要注意的地方

作者: 有虫吃 | 来源:发表于2019-04-30 15:19 被阅读0次

1.为避免循环引用,在使用代理时声明为weak对象

weak var delegate:  MyDelegate

2.使用closure闭包时注意不要形成循环引用

lazy var someClosure: (Int, String) -> String = {
    [unowned self, weak delegate = self.delegate!] (index: Int, stringToProcess: String) -> String in
    // closure body goes here
}

3.push出来的子控制器,导航栏控制器会对该子控制器进行强引用,其中 push 对应着 pop 则控制器会被销毁。其push的本质是入栈,所有的子控制器放在数组中,先进后出,如果导航栏作为根控制器。此时需要更该根控制器,不管push了多少子控制器入栈了。其最后只需要在当前显示的子控制器中对根控制器重新赋值即可。即原先的导航栏控制器没有对象强引用它,它会被释放,其所有的子控制器自然都会被释放了(前提是你本身代码不存在其他内存泄漏)

     UIApplication.shared.keyWindow?.rootViewController = newRootVC

注意:只要有present出来的控制器,一定要有对应的dismiss,否则项目中会存在无法估量的bug。
ViewController push ---->firstVC1 present--->firstVC2 。则如何在firstVC2中切换根控制器,并同时销毁之前的控制器。则必须先dismiss掉 firstVC2 。

dismiss(animated: false) {

UIApplication.shared.keyWindow?.rootViewController = newRootVC

}

判断当前Controller 是否是被present出来的可以用一下方法判断

 if self.presentingViewController != nil {
       self.dismiss(animated: false, completion: {
             UIApplication.shared.keyWindow?.rootViewController = tabBarController
          })
  }

4.Timer计时器使用时会默认形成强引用,在Timer有效的时候,引用Timer对象的对象不会执行deinit方法,所以不能再deinit里边设置self.timer?.invalidate(),self.timer = nil,要在确定需要释放这个对象的时刻调用先把Timer释放掉。

相关文章

  • iOS Swift 关于内存管理需要注意的地方

    1.为避免循环引用,在使用代理时声明为weak对象 2.使用closure闭包时注意不要形成循环引用 3.push...

  • Swift 内存管理

    Swift 内存管理 [TOC] 前言 本文将介绍一下Swift中的内存管理,关于内存的一些基础知识可以参考我以前...

  • iOS 内存管理的理解分享(理论篇)

    首先说下为什么需要深入理解iOS 的内存管理. 苹果已经把好多需要管理内存的地方,通过内部的方法已经帮我们管理好了...

  • Swift语法 Swift5 【01 - 基础语法】

    作者: Liwx 邮箱: 1032282633@qq.com iOS Swift 语法 底层原理 与 内存管理分析...

  • Swift语法 Swift5 【05 - 可选项】

    作者: Liwx 邮箱: 1032282633@qq.com iOS Swift 语法 底层原理 与 内存管理分析...

  • iOS里的内存泄露

    前言 要讲关于iOS里的内存泄露,那就需要了解一下iOS的内存管理机制。现在基本上我们使用的是ARC机制,在iOS...

  • 内存管理

    Swift内存管理:管理引用类型的内存, 不会管理值类型, 值类型不需要管理内存管理原则: 当没有任何强引用指向对...

  • iOS总结内存管理

    说到iOS的内存管理,需要明白如下几个问题: 1、iOS内存管理的机制 内存管理是程序设计中很重要的一部分,程序在...

  • 基本知识摘录

    一:内存管理的理解首先iOS中数据是存贮在堆和栈中的。内存管理需要管理堆上的内存,栈上的内存并不需要我们管理。非O...

  • iOS内功篇:内存管理

    iOS内功篇:内存管理 iOS内功篇:内存管理

网友评论

      本文标题:iOS Swift 关于内存管理需要注意的地方

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