Swift编程中用以管理内存的自动引用计数详解

2020-01-08 22:36:10王振洲

class studmarks {
    let name: String
    var stud: student?
    
    init (name: String) {
        println("Initializing: (name)")
        self.name = name
    }
    
    deinit {
        println("Deallocating: (self.name)")
    }
}

 

class student {
    let name: String
    var strname: studmarks?
    
    init (name: String) {
        println("Initializing: (name)")
        self.name = name
    }
    
    deinit {
        println("Deallocating: (self.name)")
    }
}

var shiba: studmarks?
var mari: student?

shiba = studmarks(name: "Swift")
mari = student(name: "ARC")

shiba!.stud = mari
mari!.strname = shiba


当我们使用 playground 运行上面的程序,得到以下结果。

 


Initializing: Swift
Initializing: ARC

ARC弱和无主参考
Class类型属性有两种方法可以解决强引用周期:

  1. 弱引用
  2. 无主参考

这些引用是用来使一个实例指在一个基准周期其他实例。然后实例可以为每一个实例参考代替处理强引用周期。当用户知道某些情况下可能会返回 'nil' 值,我们可能会指向使用弱引用。当实例会返回不是零的东西,然后使用无主参考声明。

弱引用程序

复制代码
class module {
    let name: String
    init(name: String) { self.name = name }
    var sub: submodule?
    deinit { println("(name) Is The Main Module") }