Tags: Swift 学习笔记
发布时间:2015-08-06
修改时间:2015-08-06
作者:Erwin
博客地址:技术杂货铺
欢迎转载,转载请注明出处。
Swift学习笔记系列——(15)自动引用计数
什么是自动引用计数
ARC机制会记录对每个类类型实例的引用次数,如果变为0,ARC会将其释放,分配的资源会被回收。
自动引用计数只针对类实例适用。
几种引用释义
引用类型 | 是否影响引用计数 | 是否可以为nil | 是否可以为常量 |
---|---|---|---|
强引用 | 是 | 是 | 是 |
弱引用 | 否 | 是 | 否 |
无主引用 | 否 | 否 | 是 |
强引用环导致类实例不能被回收
影响类实例被回收的因素:是否存在对该实例的强引用。
强引用环:引用类型的实例相互持有对方的引用,形成类似环形结构。
类实例之间形成强引用环
解决方案
采用弱类引用
一个类实例中的引用属性如果可以为nil,可以将其声明为弱引用,而且一般采用可选类型。
采用无主引用
一个类实例中的引用属性如果要求始终有值,可以将其声明为无主引用。
无主引用结合自动拆包可选类型属性
两个相互引用的类实例中,引用属性都不能为空,可以用这种方式。
类实例和闭包之间形成强引用环
解决方案
定义闭包的捕获列表,在捕获列表声明捕获的引用为弱引用或者无主引用