# 引用计数与内存管理

URL: https://caijiao.org/swift/07-classes-objects/05-arc
Source: docs/swift/07-classes-objects/05-arc.md
Description: 本章介绍 Swift 中的引用计数机制和内存管理，帮助开发者理解自动引用计数（ARC）原理，避免内存泄漏。

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 代码。
