主题
引用计数与内存管理
Swift 使用自动引用计数(ARC)管理内存,自动追踪和释放不再使用的类实例。
引用计数基础
每当创建类实例,ARC 会增加引用计数;每当引用被释放,计数减少;计数为零时,实例被销毁。
swift
class Person {
let name: String
init(name: String) {
self.name = name
print("\(name) 被初始化")
}
deinit {
print("\(name) 被销毁")
}
}
var p1: Person? = Person(name: "小明")
var p2 = p1
p1 = nil
p2 = nil // 此时 Person 实例被销毁
循环引用(Retain Cycle)
两个实例互相强引用,导致内存无法释放。使用弱引用(weak
)和无主引用(unowned
)打破循环。
swift
class A {
var b: B?
deinit { print("A 被销毁") }
}
class B {
weak var a: A?
deinit { print("B 被销毁") }
}
var a: A? = A()
var b: B? = B()
a?.b = b
b?.a = a
a = nil
b = nil // 双方正确释放
理解 ARC 和引用计数,有助于写出高效、无内存泄漏的 Swift 代码。