zoukankan      html  css  js  c++  java
  • Swift 弱引用与无主引用

    前言

    • Swift 提供了两种解决循环引用的方法,弱引用和无主引用。

    • 弱引用和无主引用可以使循环中的一个实例引用另一个实例时不使用强引用。

    1、弱引用

    • 对生命周期中会变为 nil 的实例采用弱引用,也就是说对可选类型采用弱引用。

    • 声明一个弱引用的关键字为 weak

    1.1 弱引用示例

    • 比如存在一个学生类,一个班级类,学生类有一个属性叫学生所属的班级,而班级有一个属性是班长,它引用了一个学生类,它们都是可选型。

      class Student {
          var name: String?
          weak var theClass: Class?
          
          deinit {
              print("Student deinit")
          }
      }
      
      class Class {
          var name: String?
          weak var classMonitor: Student?
          
          deinit {
              print("Class deinit")
          }
      }
      
      var sneb: Class? = Class()
      sneb?.name = "sannianerban"
      
      var xiaoming: Student? = Student()
      xiaoming?.name = "xiaoming"
      
      sneb?.classMonitor = xiaoming
      xiaoming?.theClass = sneb
      
    • 因为班长对小明的引用为弱引用,不会算作引用计数,所以此时实例 xiaoming 的引用计数为 0,调用析构器释放内存空间,现在可以自由释放 sneb 这个实例的空间了。

      sneb = nil
      xiaoming = nil
      

    2、无主引用

    • 对初始化后再也不会变为 nil 的实例采用无主引用,也就是说对非可选类型采用无主引用。

    • 声明一个无主引用的关键字为 unowned

    2.1 无主引用示例

    • 修改上例中的属性。

      class Class {
          var name: String?
          unowned var classMonitor = Student()
          
          deinit {
              print("Class deinit")
          }
      }
      
  • 相关阅读:
    POJ 1930 Dead Fraction (循环小数-GCD)
    AOJ 0005 GCD and LCM
    POJ 2395 Out of Hay (Kruskal)
    AOJ 2224 Save your cats (Kruskal)
    POJ 2377 Bad Cowtractors (Kruskal)
    POJ 1258 Agri-Net (Prim&Kruskal)
    AOJ 2200 Mr. Rito Post Office (floyd+DP)
    AOJ 2249 Road Construction (dijkstra)
    调用html进行android布局
    jsp生成静态html页面
  • 原文地址:https://www.cnblogs.com/QianChia/p/8870272.html
Copyright © 2011-2022 走看看