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

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

}

 

class submodule {
    let number: Int
    
    init(number: Int) { self.number = number }
    
    weak var topic: module?
    
    deinit { println("Sub Module with its topic number is (number)") }
}

var toc: module?
var list: submodule?
toc = module(name: "ARC")
list = submodule(number: 4)
toc!.sub = list
list!.topic = toc

toc = nil
list = nil


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

 


ARC Is The Main Module
Sub Module with its topic number is 4

无主参考程序

复制代码
class student {
    let name: String
    var section: marks?
    
    init(name: String) {
        self.name = name
    }
    
    deinit { println("(name)") }
}
class marks {
    let marks: Int
    unowned let stname: student
    
    init(marks: Int, stname: student) {
        self.marks = marks
        self.stname = stname
    }
    
    deinit { println("Marks Obtained by the student is (marks)") }
}

 

var module: student?
module = student(name: "ARC")
module!.section = marks(marks: 98, stname: module!)
module = nil


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

 


ARC
Marks Obtained by the student is 98

闭包强引用周期
当我们分配一个闭包至类实例属性,闭包的主体以捕获特定实例强参考周期发生。强引用闭合由 self.someProperty 或 self.someMethod()定义。强引用周期用作闭包引用类型。

复制代码
class HTMLElement {
    let samplename: String
    let text: String?