ARC
- Swift 使用自动引用计数(ARC)来跟踪并管理应用使用的内存。大部分情况下,这意味着在 Swift 语言中,内存管理“仍然工作”,不需要自己去考虑内存管理的事情。当实例不再被使用时,ARC 会自动释放这些类的实例所占用的内存。
- 引用计数只应用在类的实例。结构体(Structure)和枚举类型是值类型,并非引用类型,不是以引用的方式来存储和传递的。
ARC如何工作

循环引用
- 通过弱引用或者无主引用来取代强引用

解决循环引用
- 弱引用和无主引用允许引用环中的一个实例引用另外一个实例,但不是强引用。因此实例可以相互引用但是不会产生强引用环。
- 对于生命周期中引用会变为 nil 的实例,使用弱引用;对于初始化时赋值之后引用再也不会赋值为 nil 的实例,使用无主引用。
弱引用


无主引用


闭包引用循环

闭包引用循环解决

网友评论