学习目标
- 理解Swift中自动引用计数(
ARC)的基本原理。 - 掌握
ARC如何管理内存,包括引用计数的工作方式。 - 学习如何识别和解决循环强引用(
Strong Reference Cycles)。 - 掌握
weak和unowned关键字的使用场景和区别。 - 了解闭包中的循环强引用以及如何解决。
学习内容
1. 自动引用计数 (ARC) 简介
Swift 使用自动引用计数(Automatic Reference Counting, ARC)来管理应用程序的内存使用。ARC 会自动跟踪和管理你的应用程序所使用的内存,当不再需要某个类的实例时,ARC 会自动释放其占用的内存。
- 工作原理:当每次创建一个新的类实例时,
ARC会分配一块内存来存储该实例的信息。当实例不再被需要时,ARC会释放其占用的内存。为了判断一个实例是否仍然被需要,ARC会跟踪有多少个强引用指向该实例。当一个实例的强引用计数变为零时,ARC就会销毁该实例并回收其内存。
2. ARC 的工作方式
-
强引用 (Strong References):默认情况下,当你将一个类实例赋值给一个常量或变量时,这个常量或变量就会对该实例创建一个强引用。只要存在一个或多个强引用,
ARC就不会销毁该实例。 -
示例:
class Person { let name: String init(name: String) { self.name = name print("\(name) is being initialized") } deinit { print("\(name) is being deinitialized") } } var reference1: Person? var reference2: Person? var reference3: Person? reference1 = Person(name: "John Appleseed") // 引用计数为 1 // 输出: John Appleseed is being initialized reference2 = reference1 // 引用计数为 2 reference3 = reference1 // 引用计数为 3 reference1 = nil // 引用计数为 2 reference2 = nil // 引用计数为 1 reference3 = nil // 引用计数为 0,实例被销毁 // 输出: John Appleseed is being deinitialized
3. 循环强引用 (Strong Reference Cycles)
当两个或多个类实例相互持有对方的强引用时,就会发生循环强引用。
Swift中ARC内存管理与循环强引用解决

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



