Swift开发——弱占用

自动引用计数(Automatic Reference Counting,ARC),是Swift语言管理类的实例的方式。当创建某个类的一个新实例后,ARC自动为新实例分配内存空间,用于保存实例的类型和存储属性,当将该实例赋给常量、变量或其他实例的属性时,称两者建立了"强连接",或称"强引用",只要这个强引用存在,ARC将保护该实例,其占据的内存不能被释放。相对地,可以定义"弱引用",弱引用的实例可以被释放掉,指向该实例的变量将自动置为空值nil。

01、弱引用

解决强引用环问题的方法有两种:其一,采用弱引用方式;其二,采用非占用引用方式。弱引用方式下,不再被强引用的实例会立即从内存中释放掉,故弱引用方式用于类的实例具有短的生命期的情况下,非占用引用方式用于类的实例具有较长生命期的情况下。

弱引用方式在定义变量时需使用weak关键字,在程序段1中,将第26行的语句添加weak,改为

"weak var author:Author?";或者将第40行的语句添加weak,改为"weak var book:Book?";或者上述两条语句均添加weak关键字。这种添加了weak关键字后的语句将构成弱引用。程序段1的执行结果如图1所示。

■ 图1 添加了弱引用的程序段1的执行结果

由图1可知,类Book和类Author的析构器均被执行了,说明这两个类创建的实例都被从内存中释放掉了。以程序段8-7的第26行改为弱引用为例,其引用结构如图2所示。

■ 图2 添加了弱引用后的引用结构

在图2中,当将zh和bk都置为空值nil后,图2(b)中左侧的Author实例没有被其他实例强引用,故该实例将被ARC从内存中释放掉,此时,执行该实例的析构器,输出"The Author instance is deallocated."。然后,Book实例没有被其他实例强引用,故ARC将其从内存中释放掉,此时,执行该实例的析构器,输出"The Book instance is deallocated."。

相关推荐
zhangfeng113327 分钟前
openclaw skills 小龙虾技能 通讯仿真 matlab skill Simulink Agentic Toolkit,通过kimi找到,mcp通讯
开发语言·matlab·openclaw·通讯仿真
chao1898447 小时前
基于 SPEA2 的多目标优化算法 MATLAB 实现
开发语言·算法·matlab
赏金术士7 小时前
Kotlin 习题集 · 高级篇
android·开发语言·kotlin
楼兰公子8 小时前
buildroot 在编译rust时裁剪平台类型数量的方法
开发语言·后端·rust
吴声子夜歌9 小时前
Go——并发编程
开发语言·后端·golang
ooseabiscuit9 小时前
Laravel4.x:现代PHP框架的奠基之作
java·开发语言·php
c1s2d3n4cs10 小时前
Qt模仿nlohmann::json进行序列化和反序列化
开发语言·qt·json
AiTop10010 小时前
Claude Code 推出 Agent View:命令行编程正式进入“多线程并发“时代
开发语言·人工智能·ai·aigc
jf加菲猫10 小时前
第21章 Qt WebEngine
开发语言·c++·qt·ui
码农-阿杰11 小时前
深入理解 synchronized 底层实现:从 HotSpot C++ 源码看对象锁与 Monitor 机制
开发语言·c++·