# 强引用、弱引用、无主引用

URL: https://caijiao.org/swift/12-memory-arc/02-references
Source: docs/swift/12-memory-arc/02-references.md
Description: 本章介绍 Swift 中强引用、弱引用和无主引用的区别与使用场景，帮助开发者正确管理内存，避免循环引用。

Swift 使用引用计数管理内存，不同引用类型影响对象的生命周期。

## 强引用（Strong Reference）

默认引用类型，持有对象时会增加引用计数。

```swift
class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var person1: Person? = Person(name: "小明")
var person2 = person1  // 引用计数+1
````

## 弱引用（Weak Reference）

使用 `weak` 关键字声明，引用不会增加对象引用计数，引用的对象可能为 nil，因此必须声明为可选类型。

```swift
class Apartment {
    weak var tenant: Person?
}
```

用于防止循环引用，常见于两个对象相互持有时。

## 无主引用（Unowned Reference）

使用 `unowned` 声明，引用不增加计数，且不会自动变为 nil，适用于引用永远有值的场景，必须是非可选类型。

```swift
class Customer {
    var card: CreditCard?
}

class CreditCard {
    unowned let customer: Customer
    init(customer: Customer) {
        self.customer = customer
    }
}
```

## 区别总结

| 引用类型 | 是否增加引用计数 | 是否允许为 nil | 典型用例           |
| ---- | -------- | --------- | -------------- |
| 强引用  | 是        | 否         | 默认引用           |
| 弱引用  | 否        | 是         | 可能为 nil，防止循环引用 |
| 无主引用 | 否        | 否         | 永远有值，防止循环引用    |

## 总结

合理使用强、弱、无主引用是避免内存泄漏和循环引用的关键，保证应用稳定运行。
