31 lines
2.0 KiB
Markdown
31 lines
2.0 KiB
Markdown
# 自动引用计数
|
||
|
||
本页包含内容:
|
||
|
||
- 自动引用计数的工作机制
|
||
- 自动引用计数实践
|
||
- 类实例间的强引用环
|
||
- 类实例间的强引用环分解
|
||
- 闭包的强引用环
|
||
- 闭包的强引用环分解
|
||
|
||
Swift使用自动引用计数(ARC)这一机制来跟踪和管理你的应用程序的内存。通常情况下,Swift的内存管理机制会一直起着作用,你无须自己来考虑内存的管理。ARC会在类的实例不再被使用时,自动释放其占用的内存。
|
||
|
||
然而,在少数情况下,ARC为了能帮助你管理内存,需要更多的关于你的代码之间关系的信息。本章描述了这些情况,并且为你示范怎样启用ARC来管理你的应用程序的内存。
|
||
|
||
> 注意: 引用计数仅仅应用于类的实例。结构体和枚举类型是值类型,不是引用类型,也不是通过引用的方式存储和传递。
|
||
|
||
## 自动引用计数的工作机制
|
||
|
||
当你每次创建一个类的新的实例的时候,ARC会分配一大块内存用来储存实例的信息。内存中会包含实例的类型信息,以及这个实例所有相关属性的值。此外,当实例不再被使用时,ARC释放实例所占用的内存,并让释放的内存能挪作他用。这确保了不再被使用的实例,不会一直占用内存空间。
|
||
|
||
然而,当ARC收回和释放了正在被使用中的实例,该实例的属性和方法将不能再被访问和调用。实际上,如果你试图访问这个实例,你的应用程序很可能会崩溃。
|
||
|
||
为了确保使用中的实例不会被回收,ARC会跟踪和计算每一个类实例正在被多少属性,常量和变量所引用。哪怕实例的引用数为一,ARC都不会回收这个实例。
|
||
|
||
为了使之成为可能,无论你将类实例赋值给属性,常量或者是变量,属性,常量或者变量,都会对此实例创建强引用。之所以称之为强引用,是因为它会将实例牢牢的保持住,只要强引用还在,实例是不允许被释放的。
|
||
|
||
## 自动引用计数实践
|
||
|
||
|