教程 swift tutorial

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

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,防止循环引用
无主引用 否 否 永远有值,防止循环引用

总结

合理使用强、弱、无主引用是避免内存泄漏和循环引用的关键,保证应用稳定运行。