Swift学习笔记系列——(15)自动引用计数

本文深入探讨Swift中的自动引用计数(ARC)机制,包括其工作原理、如何避免强引用环导致的问题,以及通过弱引用和无主引用解决类实例与闭包间的强引用环。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Tags: Swift 学习笔记

发布时间:2015-08-06
修改时间:2015-08-06
作者:Erwin
博客地址:技术杂货铺
欢迎转载,转载请注明出处。

Swift学习笔记系列——(15)自动引用计数

什么是自动引用计数

ARC机制会记录对每个类类型实例的引用次数,如果变为0,ARC会将其释放,分配的资源会被回收。
自动引用计数只针对类实例适用。

几种引用释义

引用类型是否影响引用计数是否可以为nil是否可以为常量
强引用
弱引用
无主引用

强引用环导致类实例不能被回收

影响类实例被回收的因素:是否存在对该实例的强引用。
强引用环:引用类型的实例相互持有对方的引用,形成类似环形结构。

类实例之间形成强引用环

解决方案

采用弱类引用

一个类实例中的引用属性如果可以为nil,可以将其声明为弱引用,而且一般采用可选类型。

采用无主引用

一个类实例中的引用属性如果要求始终有值,可以将其声明为无主引用。

无主引用结合自动拆包可选类型属性

两个相互引用的类实例中,引用属性都不能为空,可以用这种方式。

类实例和闭包之间形成强引用环

解决方案

定义闭包的捕获列表,在捕获列表声明捕获的引用为弱引用或者无主引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值