强引用、弱引用、无主引用
Swift 使用引用计数管理内存,不同引用类型影响对象的生命周期。
强引用(Strong Reference)
默认引用类型,持有对象时会增加引用计数。
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var person1: Person? = Person(name: "小明")
var person2 = person1 // 引用计数+1
`
弱引用(Weak Reference)
使用 weak 关键字声明,引用不会增加对象引用计数,引用的对象可能为 nil,因此必须声明为可选类型。
class Apartment {
weak var tenant: Person?
}
用于防止循环引用,常见于两个对象相互持有时。
无主引用(Unowned Reference)
使用 unowned 声明,引用不增加计数,且不会自动变为 nil,适用于引用永远有值的场景,必须是非可选类型。
class Customer {
var card: CreditCard?
}
class CreditCard {
unowned let customer: Customer
init(customer: Customer) {
self.customer = customer
}
}
区别总结
| 引用类型 | 是否增加引用计数 | 是否允许为 nil | 典型用例 |
|---|---|---|---|
| 强引用 | 是 | 否 | 默认引用 |
| 弱引用 | 否 | 是 | 可能为 nil,防止循环引用 |
| 无主引用 | 否 | 否 | 永远有值,防止循环引用 |
总结
合理使用强、弱、无主引用是避免内存泄漏和循环引用的关键,保证应用稳定运行。
相关内容
- 什么是 Swift? Swift 是 Apple 推出的现代编程语言,专为 iOS、macOS、watchOS 与 tvOS 应用开发而设计,语法简洁、安全高效,广泛应用于移动开发与...
- Swift 与 Objective-C 的比较 Swift 与 Objective-C 都是 Apple 推出的开发语言,前者强调安全与现代化,后者历史悠久且成熟。了解两者异同有助于更好地选择开发工具。
- 安装 Xcode 与 Playground 本章介绍如何安装 Xcode 和使用 Swift Playground 进行基础练习,适合 Swift 初学者快速上手,无需搭建复杂环境即可体验代码编写与运行。
- Swift 的发展历史和现状 Swift 作为 Apple 推出的现代编程语言,经历了快速的发展和演进,现已成为 iOS、macOS 等平台主流开发语言,拥有活跃的社区和广泛的应用。
- 变量与常量 本章介绍 Swift 中变量与常量的定义与使用,帮助理解数据存储与修改的基本概念,是掌握 Swift 编程的基础。
- 数据类型 本章讲解 Swift 中的基本数据类型,包括整数、浮点数、布尔值和字符串,帮助理解变量和常量的数据存储与操作方式。